Использование пользовательского ввода для поиска файла

#python #list #file #search #text

Вопрос:

У меня возникли некоторые трудности при попытке распечатать определенные элементы из текстового файла, используя ввод пользователя.

У меня есть текстовый файл, в котором отображается идентификационный номер, название заявки, цена билета и количество доступных мест, как показано ниже соответственно:

  • Z5, Мельбурн, 150, 30
  • Z6, Нью-Йорк, 120, 60
  • Z9, Сеул, 100, 50
  • Z2, Токио, 170, 40

Я хочу, чтобы пользователь ввел либо идентификационный номер, либо Имя пункта назначения, и программа отобразит (1) соответствующий пункт назначения (если использовался идентификационный номер) или повторит (2) имя пункта назначения (если использовалось имя пункта назначения).

Таким образом, т. е. пользователь вводит Z6, и программа покажет Нью-Йорк, или если пользователь введет Нью-Йорк, то Нью-Йорк будет напечатан снова.

Приведенный ниже код позволяет распечатать соответствующее место назначения для идентификационного номера; однако я не могу распечатать имя места назначения, если пользователь вводит имя места назначения, так как я получаю индекс списка вне диапазона ошибок.

 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])

 

Ответ №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
 

потому что это формат, который ожидает ваш код.

Комментарии:

1. Спасибо за ответ. Забыл упомянуть об этом в ОП, но список должен остаться таким, как есть, поскольку в текстовый файл не требуется вносить никаких изменений в соответствии с требованиями к заданию, и поэтому я не могу внести эти изменения, даже если это решит проблему, которую я искал.

2. @Blackrock есть ли в вашем текстовом файле пробелы после запятых? Если это так, вы можете изменить значение I.split(',') на I.split(', ') (добавить пробел после запятой внутри кавычек), чтобы исправить это. если вы разделите только запятую, в начале названия города будет дополнительное место.