Ваша проблема здесь в области видимости - exit
является локальной для функции exit()
, поэтому не влияет на переменную exit
в области видимости цикла.
Лучшее решение это:
exit = False
while not exit:
option = raw_input("What would you like to do?")
if option == "exit":
exit = True
Или просто:
while True:
option = raw_input("What would you like to do?")
if option == "exit":
break
Обратите внимание на использование True
и False
над 1
и 0
- это более питоническое значение, поскольку здесь вы подразумеваете истинные значения, а не целые числа. Я также изменил сравнение со строкой "exit"
, поскольку предположил, что это именно то, что вам нужно, не сравнивая введенные пользователем значения со значением exit
.
Если ваша проблема в том, что вы хотите иметь одинаковую область действия, возможно, вы захотите сделать свой код частью класса.
class Doer: #Naturally, give it a real name based on it's purpose.
def __init__(self):
self.exit = False
while not self.exit:
option = raw_input("What would you like to do?")
if option == "exit":
self.exit()
def exit(self):
self.exit = True
Здесь exit
- переменная экземпляра (следовательно, к ней обращаются из self
), и поэтому оба раза мы ссылаемся на одну и ту же переменную.
Если ваш код не является упрощением более сложной проблемы, это в значительной степени излишне, так как одно из первых решений было бы более уместным.