简体   繁体   中英

returning 1 instead of true in python

I am trying to return one instead of true in python.

The code i am working on is:

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)

It basically checks whether the string typed is balanced or not. If balanced, should return 1 and if not 0.

I tried this:

1
Test string
True

It returns true. I would like it to return 1. How do i do it?

Alternatively you could cast your boolean to an int:

>>>myBoolean = True
>>>int(myBoolean)
1
>>>myBoolean = False
>>>int(myBoolean)
0

Huh? You change the code:

Instead of

return False

write

return 0

and instead of

return len(stack) == 0

write

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

The latter 3-liner can be rewritten on a single line, but I chose the above for clarity.

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

This concisely changes the return value of is_balanced , and is equivalent to:

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

Of course you could keep is_balanced unchanged and print (in similar notation):

1 if is_balanced(s) else 0

Just use

print +is_balanced(s)

instead.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM