一位程序员正在尝试编写一个程序,允许用户输入学生姓名,然后通过输入学生 ID 号来搜索学生信息。但是,他在编写代码时遇到了问题,并且不确定原因。以下是他的代码:
students = {}
def add_student():
# Lastname, Firstname
name = raw_input("Enter Student's Name")
# ID Number
idnum = raw_input("Enter Student's ID Number")
# D.O.B.
bday = raw_input("Enter Student's Date of Birth")
print "Student Added!"
students[idnum] = {'name': name, 'bday': bday}
def delete_student():
idnum = raw_input("delete which student:")
if idnum in students:
del students[idnum]
def find_student():
print "Find"
idnum = raw_input("Enter Student ID:")
if [idnum] in students:
print "Name:" + [idnum]["name"]
print "ID Number:" + [idnum]["idnum"]
print "Date of Birth:" + [idnum]["bday"]
def show_student_record():
idnum = raw_input("show which student's records?:")
if idnum in students:
print "Name:" + [idnum]["name"]
print "ID Number:" + [idnum]["idnum"]
print "Date of Birth:" + [idnum]["bday"]
menu = {}
menu['1'] = "Add Student."
menu['2'] = "Delete Student."
menu['3'] = "Find Student"
menu['4'] = "Exit"
menu['5'] = "Show Student Record"
while True:
options = menu.keys()
options.sort()
for entry in options:
print entry, menu[entry]
selection = raw_input("Please Select:")
if selection == '1':
add_student()
elif selection == '2':
delete_student()
elif selection == '3':
find_student()
elif selection == '5':
show_student_record()
elif selection == '4':
break
else:
print "Unknown Option Selected!"
with open('Students', 'w') as saveFile:
saveFile.write("Records" + "\n")
name = []
idnum = []
bday = []
with open('Students', 'r') as inFile:
for line in inFile:
line = line.rstrip()
name.append(line[0])
idnum.append(line[1])
bday.append(line[2])
程序员在调用 find_student() 函数时遇到了错误,错误信息是:
Traceback (most recent call last): File "", line 83, in File "", line 48, in find_student NameError: global name 'idnum' is not defined
## 2、解决方案
错误的原因是程序员在 find_student() 函数中使用了未定义的变量 idnum。为了解决这个问题,需要将 idnum 定义为函数的参数,或者在函数内部使用 global 语句来声明 idnum 是一个全局变量。
以下是修改后的 find_student() 函数:
```python
def find_student(idnum):
print "Find"
try:
print "Name: " + students[idnum]["name"]
print "ID Number: " + idnum
print "Date of Birth: " + students[idnum]["bday"]
except KeyError, ex:
print ex.message + ' not found'
现在,程序员可以在调用 find_student() 函数时传递学生 ID 号作为参数,例如:
find_student("S001")
这样,程序员就可以成功地搜索学生信息了。
以下是修改后的完整代码:
students = {}
def add_student():
# Lastname, Firstname
name = raw_input("Enter Student's Name")
# ID Number
idnum = raw_input("Enter Student's ID Number")
# D.O.B.
bday = raw_input("Enter Student's Date of Birth")
print "Student Added!"
students[idnum] = {'name': name, 'bday': bday}
def delete_student():
idnum = raw_input("delete which student:")
if idnum in students:
del students[idnum]
def find_student(idnum):
print "Find"
try:
print "Name: " + students[idnum]["name"]
print "ID Number: " + idnum
print "Date of Birth: " + students[idnum]["bday"]
except KeyError, ex:
print ex.message + ' not found'
def show_student_record():
idnum = raw_input("show which student's records?:")
if idnum in students:
print "Name:" + [idnum]["name"]
print "ID Number:" + [idnum]["idnum"]
print "Date of Birth:" + [idnum]["bday"]
menu = {}
menu['1'] = "Add Student."
menu['2'] = "Delete Student."
menu['3'] = "Find Student"
menu['4'] = "Exit"
menu['5'] = "Show Student Record"
while True:
options = menu.keys()
options.sort()
for entry in options:
print entry, menu[entry]
selection = raw_input("Please Select:")
if selection == '1':
add_student()
elif selection == '2':
delete_student()
elif selection == '3':
idnum = raw_input("Enter Student ID:")
find_student(idnum)
elif selection == '5':
show_student_record()
elif selection == '4':
break
else:
print "Unknown Option Selected!"
with open('Students', 'w') as saveFile:
saveFile.write("Records" + "\n")
name = []
idnum = []
bday = []
with open('Students', 'r') as inFile:
for line in inFile:
line = line.rstrip()
name.append(line[0])
idnum.append(line[1])
bday.append(line[2])
程序员现在可以成功地运行该程序,并通过输入学生 ID 号来搜索学生信息。