2017-12-16 9 views
1

保存されたスコアとユーザー名を取得する必要があるテキストファイルがあるクイズを作成しています。ただし、スコアをメインメニューに戻すとすぐに、結果の1つだけが表示されます。メニューに戻るときに一度だけ印刷された行

これは私のテキストファイルは次のようになります。

Ted History Easy 4 points Grade : B 
Ted Biology Hard 5 points Grade : A 
John History Medium 3 points Grade : C 
Ted History Medium 2 points Grade : D 

これは私のコードです:ので、リターンメニューコマンドの

def results(): 
    found = False 
    username = input("Enter username :") 
    for line in open("scorefile.txt","r"): 
     if username in line: 
      print (line) 
      found = True 
      return menu() 
    if not found: 
     print("No such user") 
     return menu() 

(私がメインに戻るには、プログラムを取得する必要がありますメニュー)、テキストファイルの最初の結果のみが表示されます(この場合、Ted History Easy 4点Grade:B)。しかし、復帰メニュー()のコード行を取り除くとすぐに、すべての入力されたユーザー名の結果が表示されます。すべての結果を表示してメインメニューに戻るコードを取得するにはどうすればよいですか?

+0

フルコードを投稿できますか? – hallaksec

+0

return文は最初の繰り返しでループを終了します。字下げしないでください –

+0

プログラミングの 'return'は「どこか別の場所に移動する」という意味ではなく、「その変数を呼び出し関数に返す」という意味です –

答えて

2

ちょうどあなたが複数の結果、すなわち印刷したい場合はループからごreturn文を削除します。

def results(): 
    found = False 
    username = input("Enter username :") 
    with open("scorefile.txt","r") as f: 
     for line in f: 
      if username in line: 
       print (line) 
       found = True 
     if not found: 
      print("No such user") 
    menu() # call your menu() function in the end 

をあなたはmenu()リターンはあなたによって返されるものは何でも期待しない限り、あなたはまた、return menu()する必要はありませんresults()機能。

コードに気付くもう1つの問題は、誰かがpointsをユーザ名として入力したことです。あなたの条件を次のように設定したいと思うかもしれません:if line.startswith(username): ...

関連する問題