#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(', ')
(добавить пробел после запятой внутри кавычек), чтобы исправить это. если вы разделите только запятую, в начале названия города будет дополнительное место.