2017-10-13 61 views
0

我目前正在學習Python,並正在製作一個網球教練程序。在可以更新它的選項3上不起作用,因爲它說nameUnder沒有在else語句中定義。請幫助,因爲我真的不明白爲什麼它不工作。我也曾經嘗試它沒有分裂,但文件更新時未定義變量

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'創建的,所以它的範圍只在'if'。 「else」不在此範圍內。 – Neo

+0

那麼我該如何解決它?對不起,我是編程新手xD –

+0

您需要將其設置在'else'本身或者'if'之前。 – Neo

回答

0

nameUnder僅被定義到不工作,如果這個說法是正確的if details[0] == studentName:

不是你的邏輯的100%,在這裏,但一定要設置nameUnder= ""在if語句之前,所以變量被聲明並可以在你的else子句中使用。

我會建議你用每個選項等的函數來構造你的代碼,這將使它更容易閱讀和可能的重用一些代碼。

晴更新的代碼:

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

我認爲這就像做'except:pass' ...你忽略瞭如果details details [0]!= studentName'沒有定義'nameUnder'應該是什麼的邏輯問題。 (當然,除非''「'是理想的值) – Neo

+0

不確定你的意思,但我說我並不真正理解他的邏輯,我也沒有試圖改進他的整體計劃,我給他的問題的答案爲什麼他得到一個未定義的錯誤。 – StefanE