有幾種方法可以做到這一點。
這裏的@ BingsF的聰明的答案(這人會不會掩蓋所選擇的功能內引發的異常),一個更強大的版本:
class LoopBreak(Exception):
pass
def zero():
print("Yo")
def one():
print("Hey")
def two():
raise LoopBreak
options = {
0: zero,
1: one,
2: two
}
while True:
try:
response = int(input("Number: "))
action = options[response]
except (ValueError, KeyError):
print("Not a valid response")
continue
try:
action()
except LoopBreak:
break
或者你可以指定你的字典裏一個特殊的標誌,這將迫使一個破解:
def zero():
print("Yo")
def one():
print("Hey")
options = {
0: zero,
1: one,
2: False
}
while True:
try:
response = int(input("Number: "))
action = options[response]
except (ValueError, KeyError):
print("Not a valid response")
continue
if action is False:
break
else:
action()
或者使用一個特殊的返回值來強制終止:
def zero():
print("Yo")
# returns None by default
def one():
print("Hey")
# returns None by default
def two():
return False
options = {
0: zero,
1: one,
2: two
}
while True:
try:
response = int(input("Number: "))
action = options[response]
except (ValueError, KeyError):
print("Not a valid response")
continue
if action() is False:
break
下面的代碼可能更「Pythonic」。它可能比上面的方法慢得多,因爲它必須檢查所有的if
語句,而不是通過散列在字典中查找函數。但它可能更易於閱讀和維護。
while True:
try:
response = int(input("Number: "))
except ValueError:
response = -1 # error flag
if response == 0:
print("Yo")
elif response == 1:
print("Hey")
elif response == 2:
break
else:
print("Not a valid response")
哪種語言,你比較,當你說「湊合用Python的缺乏switch語句的」?在C/C++ switch語句中,你會遇到類似的問題:'break'只會退出switch語句,並且需要其他方式來退出循環(請參閱http://stackoverflow.com/questions/對的一 - 環 - 從-內部-A-開關如何致斷出)1420029 /。 –