文件更新时未定义变量

时间:2017-10-13 11:22:25

标签: python

我目前正在学习Python,我正在制作一个网球教练计划。在可以更新它的选项3上没有工作,因为它在name语句中没有定义nameUnder。请帮忙,因为我真的不明白为什么它不起作用。我也试过没有拆分,但那不起作用

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!")
#/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

1 个答案:

答案 0 :(得分:0)

如果此语句为真nameUnder

,则只会定义

if details[0] == studentName:

这里不是100%的逻辑,但请确保在if语句之前设置nameUnder= "",以便声明变量,并且可以在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: ")