2017-10-21 71 views
1

当我在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() 
+0

尝试引发值错误或使用break语句。 – mikey

回答

-1

要调用的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...") 
+0

事实上,他在重复“while”循环之前调用它。 – Barmar

+0

是的,我刚刚注意到,我被2空格缩进所愚弄。谢谢。 –

+0

当递归被移除时,一个简单的'return'也会结束程序。不需要'keepGoing'。 –