2017-10-13 9 views
0

現在私はPythonを学習しており、テニスコーチプログラムを作っています。オプション3では、更新することができません。これは、nameUnderがelseステートメントに定義されていないと表示されているため動作しません。なぜ私はそれが機能していないのか分かりません。私はまた、分割せずにそれをしようとしているが、この文はここにあなたのロジックの100%if details[0] == studentName:ファイル更新時に変数が定義されていません

真でない場合とは

import os, sys 
print("Please select an option:") 
print("[1] Add a student") 
print("[2] Read a students data") 
print("[3] Update a students data") 
print("[4] Delete a students data") 
menuSelect = int(input("Make your number selection: ")) 
#///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 

if menuSelect == 1: 
    amountDone=0 
    amounttodo=int(input("Enter the number of contestants you would like to add: ")) 


    while amounttodo>amountDone: 
     ageOne=int(input("Enter the age of the contestant: ")) 
     if ageOne <= 11: 
      underFile=open("Under11s.txt","a") 
      nameUnder=input("Enter the first name of the student: ") 
      genderUnder=input("Enter the gender of the student: ") 
      posUnder=int(input("Input the last position of the student: ")) 
      underFile.write("\n"+str(nameUnder) + " | " + str(genderUnder) + " | " + str(posUnder)) 
      underFile.close() 
      amountDone=amountDone+1 
     elif ageOne >= 12: 
      overFile=open("Over11s.txt","a") 
      nameOver=input("Enter the first name of the student: ") 
      genderOver=input("Enter the gender of the student: ") 
      posOver=int(input("Input the last position of the student: ")) 
      overFile.write("\n"+str(nameOver) + " | " + str(genderOver) + " | " + str(posOver)) 
      overFile.close() 
      amountDone=amountDone+1 
     else: 
      print("Invalid, Please enter a number") 
#///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 

elif menuSelect == 2: 
    print("Enter the file you would like to open.") 
    print("1) Under 11's") 
    print("2) Over 11's") 
    fileToOpen=int(input("Enter the number of your selection: ")) 
    if fileToOpen == 1: 
     f = open("Under11s.txt", "r") 
     file_contents = f.read() 
     print(file_contents) 
    elif fileToOpen == 2: 
     f = open("Over11s.txt", "r") 
     file_contents = f.read() 
     print(file_contents) 
#///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
elif menuSelect == 3: 
    studentName = input("Enter the student name you are looking for:") 
    file = open("Under11s.txt","r") 
    found=False 
    for line in file: 
     details = line.split(",") 
     writefile = open("Under11supdated.txt","a") 
     details = line.split(",") 
     if details[0] == studentName: 
      found=True 
      nameUnder=input("Enter the first name of the student: ") 
      genderUnder=input("Enter the gender of the student: ") 
      posUnder=int(input("Input the last position of the student: ")) 
      file.write("\n"+str(nameUnder)[0] + " | " + str(genderUnder)[1] + " | " + str(posUnder)[2]) 
     else: 
      file.write("\n"+nameUnder[0] + " | " + genderUnder[1] + " | " + posUnder[2]) 
     file.close() 
    file.close() 
    os.remove("Under11s.txt") 
    os.rename("Under11supdated.txt","Under11s.txt") 
    if found==True: 
     print("Details updated") 
    else: 
     print("That student cannot be found in the file, no changes made") 
#///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 

else: 
    print("Sorry, this option is not available yet!") 
#///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
+0

は' if'です。 'else'はこのスコープの外にあります。 – Neo

+0

どうすれば修正できますか?申し訳ありません私はxDをプログラミングするのが初めてです –

+0

あなたはそれを 'else'自身で、あるいは' if'の前に設定する必要があります。 – Neo

答えて

0

nameUnder動作しないだけ定義されますが、設定してくださいif文の前にnameUnder= ""があるので、変数が宣言され、else節で使用できます。

各オプションなどの関数を使用してコードを構造化することをお勧めします。コードの一部を読みやすく、再利用できるようになります。

部分的に更新されたコード:それは `if`で作成され、それはスコープがありますされ

writefile = open("Under11supdated.txt","a") 
details = line.split(",") 
nameUnder = "" 
if details[0] == studentName: 
    found=True 
    nameUnder=input("Enter the first name of the student: ") 
    genderUnder=input("Enter the gender of the student: ") 
+0

私は、これは除いて'やって似ていると思います。 (もちろん、 '' 'が望ましい値でない限り) – Neo

+0

あなたは何を意味するのか分かりませんが、私は彼のロジックを本当に理解していないと言いますし、彼の全体的なプログラムを改善しようとはしていません。なぜ彼は未定義のエラーを取得する彼の質問への答え。 – StefanE

関連する問題