循环显示带有输入

时间:2017-10-21 12:09:52

标签: python loops text-files

我在此布局中设置了一个文本文件:

  

格雷格,计算机科学,硬,5

     

Alex,计算机科学,中等,2

     

菲奥娜,数学,简单,0

     

Cassie,数学,中等,5

     

亚历,数学,中,1

在我的程序中,我希望用户能够选择某个名称并查看其结果。我的代码如下所示:

name = input("Enter name: ")
for each in file:
    each = each.split(",")
    realName = each[0]
    subject = each[1]
    difficulty = each[2]
    score = each[3]
    if name == realName:
        print(subject, difficulty, score)
        break
else:
    print()
    print("Invalid name.")
    name = input("Re-enter your name: ")

但有些事情是错的,我无法弄清楚该做什么:

  1. 如果用户输入“Alex”,则只会显示其中一个结果。
  2. 如果输入错误的名称一次,输入的每个其他名称将返回“无效”。
  3. 如果输入了正确的名称并显示结果,程序将继续询问姓名。
  4. 有没有人解决这些问题?

2 个答案:

答案 0 :(得分:0)

如果您要反复查询文件,我建议您将数据预先加载到字典中,并在需要时打印数据。像这样:

data = {}
with open('file.txt', 'r') as file:
    for line in file:
        realName, subject, difficulty, score = each.split(',') 
        data.setdefault(realName, []).append((subject, difficulty, score))

while True:
    name = input('>>> ')
    data.get(name, 'Invalid Name')

这解决了第一和第二个问题。如果您只想在输入第一个有效名称后中断,则可以查询dict.get的返回值:

while True:
    name = input('>>> ')
    result = data.get(name)
    if result:
        print(result)
        break

    print('Invalid name')

这解决了问题三。

答案 1 :(得分:0)

您最好使用csv module,因为您的文件语法是简单的CSV。

然后你可以遍历行(每行都是一个值数组)。

import csv

def parse_csv_file(csv_file, operation, value, index):
    with open(csv_file, newline='') as file:
        reader = csv.reader(file, delimiter=',',
                            quotechar='|')
        return operation(reader,
                        value, index)


def find_first_row(csv_reader, value, index):
    for row in csv_reader:
        if row[index] == value:
            return row
    return None


def main():

    query = input('Enter a name: ')

    result = parse_csv_file('file.csv',
                            find_first_row,
                            query, 0)

    if result:
        print(result)
    else:
        print('Nothing found!')

main()