2017-08-17 63 views
-1

我正在制作一个程序,要求用户输入他们的学生ID,并显示学生信息,如学生ID和学生姓名。我首先要求用户输入他们的ID,然后读取一个.txt文件,并检查学生ID是否匹配,然后打印出用户的特定学生的.txt文件信息的内容。在寻找。将用户输入与Python中的文件记录匹配

这是我的文件

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

+1

看到作为这道题的学生信息,我认为你是一个,这就是功课。如果情况并非如此,请不好意思。但如果是这样的话,请在提问有关SO之前去找你的教授。 – ktb

回答

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 
0

既然这样你的代码遍历每个ID和姓名以及各分配到stdIdstdName,但你在这之前退出循环检查匹配...因为它只保存存储的最后的值在循环中的那些变量中。你需要在循环检查,因为这样

# 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 
-1

使用raw_input而不是input

你几乎从不想使用input,因为它确实评估。在这种情况下,输入一个精确的整数会给你一个整数,而文件给你一个字符串,所以它不会匹配。

您在代码中有其他小问题。

  • 如果循环与userInput == stdId一起输入,您将永远循环打印True
  • 你从来没有真正搜索通过学生的ID,你查一下你以前的循环
    • 最后一组(对于这一点,如果你打算做多个用户的查询,或只是看看,我会建议使用字典你读文件的一个简单的脚本线)
+0

downvote的任何原因?我应该注意到我回答了通用版本,而不是做这项工作,因为这一行表明它是一个确切的家庭作业(而不是一般性问题):'C:\\ Users \\ jaspe \\ Desktop \\ PADS Assignment \\ Student.txt' – Cireo

相关问题