将用户输入与Python

时间:2017-08-17 02:35:41

标签: python

我正在制作一个程序,要求用户输入他们的学生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

,我得到的输出也是假的

3 个答案:

答案 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分配到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

答案 2 :(得分:-1)

使用raw_input代替input

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

您在代码中还有其他小问题/主要问题。

  • 如果使用userInput == stdId输入循环,您将永远循环打印True
  • 您实际上从未搜索过学生ID,只需检查上一个循环中的最后一个
    • (为此,如果您打算进行多个用户查询,我会建议您使用字典,或者只是在阅读文件的行时查看简单的脚本)