2012-09-12 83 views
2

我想在python中返回一個而不是true。在python中返回1而不是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.我該怎麼做?

+2

你爲什麼要這麼做? – Fabian

+0

'True'和'False'是'True == 1'和'False == 0'的int類的子類。事實上,你可以用'True'和'False'完成所有正常的算術運算。 '1 + True'是一個值表達式(並且計算結果爲2)。同樣,「1 + False」的計算結果與您預期的一樣。 – mgilson

回答

14

或者你可以投你的布爾爲int:

>>>myBoolean = True 
>>>int(myBoolean) 
1 
>>>myBoolean = False 
>>>int(myBoolean) 
0 
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 
6

咦?你更改代碼:

代替

return False 

return 0 

和替代

return len(stack) == 0 

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

後面的3行可以在一行上重寫,但爲了清晰起見,我選擇了上面的行。

1

只需使用

print +is_balanced(s) 

代替。

相關問題