我正在制作一个程序,要求用户输入他们的学生ID,它会显示学生信息,如学生证和学生姓名。我首先要求用户输入他们的ID,然后它将读取.txt文件并检查学生ID是否匹配然后它将打印出我的.txt文件信息的内容。正在寻找。
这是我的文件内容
201707001 Michael_Tan
201707002 Richard_Lee_Wai_Yong
201707003 Jean_Yip
201707004 Mark_Lee
201707005 Linda_Wong
201707006 Karen_Tan
201707007 James_Bond
201707008 Sandra_Smith
201707009 Paul_Garcia
201707010 Donald_Lim
这是我的源代码
# user can find out the student info
userInput = input("Please enter a student ID: ")
# read the students file
with open('C:\\Users\\jaspe\\Desktop\\PADS Assignment\\Student.txt') as f:
studentFile = f.readlines()
for student in studentFile:
stdId, stdName = student.strip().split(" ",1)
# check if the student exist
matched = True
while matched:
if userInput == stdId:
print("True")
else:
print("False")
matched = False
break
但即使输入确切的studentID
,我得到的输出也是假的答案 0 :(得分:0)
您应该在阅读文件时执行检查。否则,您正在拆分并获取信息,但此数据在后续迭代中会丢失。试试这个:
with open('C:\\Users\\jaspe\\Desktop\\PADS Assignment\\Student.txt') as f:
studentFile = f.readlines()
for student in studentFile:
stdId, stdName = student.strip().split()
if userInput == stdId:
print(stdName)
break
更好的是,对于大文件,按行迭代。不要使用f.readlines
,因为它会将所有数据加载到内存中。
with open('C:\\Users\\jaspe\\Desktop\\PADS Assignment\\Student.txt') as f:
for line in f:
stdId, stdName = line.strip().split()
if userInput == stdId:
print(stdName)
break
答案 1 :(得分:0)
当你的代码循环遍历每个ID和名称并将每个ID分配到stdId
和stdName
时,但在检查匹配之前该循环退出...因为它只保留循环中存储在这些变量中的最后一个值。你需要循环检查,如此
# user can find out the student info
userInput = input("Please enter a student ID: ")
# read the students file
with open('C:\\Users\\jaspe\\Desktop\\PADS Assignment\\Student.txt') as f:
studentFile = f.readlines()
for student in studentFile:
stdId, stdName = student.strip().split(" ",1)
# check for a match here, break the loop if a match is found
答案 2 :(得分:-1)
使用raw_input
代替input
。
您几乎从不想使用input
,因为它会进行评估。在这种情况下,输入一个完整的整数会给你一个整数,而文件会给你一个字符串,所以它不匹配。
您在代码中还有其他小问题/主要问题。
userInput == stdId
输入循环,您将永远循环打印True
。