3

我试图在 python 中返回一个而不是 true。

我正在处理的代码是:

delimiters = ( '()', '[]', '{}', "''", '""' )
esc = '\\'

def is_balanced(s, delimiters=delimiters, esc=esc):
    stack = []
    opening = tuple(str[0] for str in delimiters)
    closing = tuple(str[1] for str in delimiters)
    for i, c in enumerate(s):
        if len(stack) and stack[-1] == -1:
            stack.pop()
        elif c in esc:
            stack.append(-1)
        elif c in opening and (not len(stack) or opening[stack[-1]] != closing[stack[-1]]):
            stack.append(opening.index(c))
        elif c in closing:
            if len(stack) == 0 or closing.index(c) != stack[-1]:
                return False
            stack.pop()

    return len(stack) == 0

num_cases = raw_input()
num_cases = int(num_cases)
for num in range(num_cases):
    s = raw_input()
    print is_balanced(s)

它基本上检查输入的字符串是否平衡。如果平衡,则应返回 1,否则应返回 0。

我试过这个:

1
Test string
True

它返回真。我希望它返回 1. 我该怎么做?

4

4 回答 4

19

或者,您可以将布尔值转换为 int:

>>>myBoolean = True
>>>int(myBoolean)
1
>>>myBoolean = False
>>>int(myBoolean)
0
于 2012-09-12T10:37:36.437 回答
6

嗯?您更改代码:

代替

return False

return 0

而不是

return len(stack) == 0

if len(stack) == 0:
  return 1
return 0

后面的 3-liner 可以在一行上重写,但为了清楚起见,我选择了上面的。

于 2012-09-12T10:32:38.353 回答
3
return 1 if len(stack) == 0 else 0

这简洁地改变了 , 的返回值is_balanced,相当于:

if len(stack) == 0:
    return 1
else:
    return 0

当然,您可以保持is_balanced不变并打印(以类似的符号):

1 if is_balanced(s) else 0
于 2012-09-12T10:31:37.367 回答
2

只需使用

print +is_balanced(s)

反而。

于 2012-09-12T10:37:16.950 回答