【问题标题】:Using User Input to Search a File使用用户输入搜索文件
【发布时间】:2021-11-23 11:49:28
【问题描述】:

我在尝试使用用户输入从文本文件中打印出某些元素时遇到了一些困难。

我有一个文本文件,其中分别显示 ID 号、目的地名称、票价和可用座位数,如下所示:

  • Z5, 墨尔本, 150, 30
  • Z6, 纽约, 120, 60
  • Z9, 首尔, 100, 50
  • Z2, 东京, 170, 40

我想要用户输入 ID 号或目的地名称,程序将显示 (1) 对应的目的地(如果使用了 ID 号)或重复 (2 ) 目的地名称(如果使用了目的地名称)。

也就是说,用户输入 Z6,程序将显示 New York,或者如果用户输入 New York,则将再次打印 New York。

下面的代码可以打印出ID号对应的目的地;但是,如果用户输入目的地的名称,我似乎无法打印出目的地的名称,因为我得到一个列表索引超出范围错误。

search = str (input ('Please enter the name or ID number of the destination:\n'))  
info = open ('destinations.txt', 'r').readlines()
for I in info:
    data = I.split (',')
    if search == data[0]:
     print (data[1])
    elif search == data[1]:
     print ([data[1])

【问题讨论】:

    标签: python list file search text


    【解决方案1】:

    我复制了您的代码,唯一需要修复的是最后一行的语法错误:print([data[1])data 之前有一个额外的开放方括号。以下代码正常工作:

    search = str (input ('Please enter the name or ID number of the destination:\n'))  
    info = open ('destinations.txt', 'r').readlines()
    for I in info:
        data = I.split (',')
        if search == data[0]:
            print (data[1])
        elif search == data[1]:
            print (data[1])
    

    您还可以使用or 语句将这两个条件合二为一:

    if search == data[0] or search == data[1]:
        print(data[1])
    

    确保您的 destinations.txt 看起来像这样:

    Z5,Melbourne,150,30
    Z6,New York,120,60
    Z9,Seoul,100,50
    Z2,Tokyo,170,40
    

    因为这是您的代码所期望的格式。

    【讨论】:

    • 感谢您的回复。忘记在 OP 中提及这一点,但列表必须保持原样,因为不会根据分配的要求对文本文件进行任何更改,因此,即使它确实解决了我也无法进行这些调整我所追求的问题。
    • @Blackrock 你的文本文件在逗号后有空格吗?如果是这样,您可以将I.split(',') 更改为I.split(', ')(在引号内的逗号后添加一个空格)来修复它。如果只用逗号分隔,城市名称开头会多出一个空格。
    猜你喜欢
    • 2019-03-21
    • 2017-04-14
    • 2017-04-16
    • 2013-08-31
    • 1970-01-01
    • 2014-03-02
    • 2021-06-16
    • 2017-09-03
    相关资源
    最近更新 更多