如何停止该程序Python
当我在IDLE中运行这个程序,并且为响应键入0时,它会打印消息,但不会停止程序。我认为设置keepGoing到假会阻止它,但我不知道发生了什么。请帮助如何停止该程序Python
""" crypto.py
Implements a simple substitution cypher
"""
alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
key = "XPMGTDHLYONZBWEARKJUFSCIQV"
def main():
keepGoing = True
while keepGoing:
response = menu()
if response == "1":
plain = input("text to be encoded: ")
print(encode(plain))
elif response == "2":
coded = input("code to be decyphered: ")
print (decode(coded))
elif response == "0":
print ("Thanks for doing secret spy stuff with me.")
keepGoing = False
else:
print ("I don't know what you want to do...")
return main()
def menu():
print("Secret decoder menu")
print("0) Quit")
print("1) Encode")
print("2) Decode")
print("What do you want to do?")
response = input()
return response
def encode(plain):
plain = plain.upper()
new = ""
for i in range(len(plain)):
y = alpha.index(plain[i])
new += key[y]
return new
def decode(coded):
coded = coded.upper()
x = ""
for i in range(len(coded)):
z = key.index(coded[i])
x += alpha[z]
return x
main()
要调用的main()再次,退出while循环之前,并重新启动程序:
def main():
keepGoing = True
while keepGoing:
response = menu()
if response == "1":
plain = input("text to be encoded: ")
print(encode(plain))
elif response == "2":
coded = input("code to be decyphered: ")
print (decode(coded))
elif response == "0":
print ("Thanks for doing secret spy stuff with me.")
keepGoing = False
else:
print ("I don't know what you want to do...")
# return main() # <-- delete this line
更好的设计,通过@Barmar的建议,是使用while True
循环和break
语句在达到一定条件时退出:
def main():
while True:
response = menu()
if response == "1":
plain = input("text to be encoded: ")
print(encode(plain))
elif response == "2":
coded = input("code to be decyphered: ")
print (decode(coded))
elif response == "0":
print ("Thanks for doing secret spy stuff with me.")
break
else:
print ("I don't know what you want to do...")
事实上,他在重复“while”循环之前调用它。 – Barmar
是的,我刚刚注意到,我被2空格缩进所愚弄。谢谢。 –
当递归被移除时,一个简单的'return'也会结束程序。不需要'keepGoing'。 –
尝试引发值错误或使用break语句。 – mikey