我试图在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
它返回true。我希望它返回1.我该怎么做?
答案 0 :(得分:18)
或者你可以将你的布尔值转换为int:
>>>myBoolean = True
>>>int(myBoolean)
1
>>>myBoolean = False
>>>int(myBoolean)
0
答案 1 :(得分:6)
咦?您更改了代码:
而不是
return False
写
return 0
而不是
return len(stack) == 0
写
if len(stack) == 0:
return 1
return 0
后一个3-liner可以在一行上重写,但为了清晰起见我选择了上面的内容。
答案 2 :(得分: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
答案 3 :(得分:1)
只需使用
print +is_balanced(s)
代替。