2017-10-21 22 views
1

これをIDLEで実行し、応答に0を入力すると、メッセージは印刷されますが、プログラムは停止しません。私はkeepGoingをFalseに設定するとそれを止めると思ったが、何が起こっているのかわからない。このプログラムを停止するには

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を使用することです:もう一度、whileループを終了し、プログラムを再起動する前に)あなたは(メイン呼び出している

""" 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

を助けてくださいループ、および特定の条件に達すると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'の必要はありません。 –

関連する問題