3

Pythonでtrueではなく1を返そうとしています。

私が取り組んでいるコードは次のとおりです。

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 を返したいのですが、どうすればいいですか?

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 ライナーは 1 行に書き直すことができますが、わかりやすくするために上記を選択しました。

于 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 に答える