Python 回忆数据

91 阅读3分钟

一位程序员正在尝试编写一个程序,允许用户输入学生姓名,然后通过输入学生 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 号来搜索学生信息。