#python #list
#python #Список
Вопрос:
Я пытаюсь создать программу на Python, которая берет несколько строк от пользователя и добавляет их в список. Ввод пустой строки завершает программу и возвращает список. Однако в список добавляется только каждая вторая строка. Если бы кто-нибудь мог помочь, это было бы здорово.
def read_lines():
lines = []
contin = True
while contin:
if len(input()) == 0:
contin = False
else:
lines.append(input())
return(lines)
Вот мой код, вот что происходит:
>>> read_lines()
abc
def
ghi
jkl
['def', 'jkl']
Комментарии:
1. каждая вторая строка теряется при проверке ее длины!!!
2. Отвечает ли мое объяснение на ваши сомнения?
Ответ №1:
Потому что вы вызываете это дважды для каждой итерации. Вы вызываете его один раз для len
проверки, и один раз для append
. Каждый раз она извлекает новую строку из командной строки. Подумайте о том, чтобы вызвать его один раз и сохранить результат в переменной в верхней части вашего цикла. Затем выполните свои len
и append
операции над этим сохраненным результатом.
Комментарии:
1. О, конечно, это глупая ошибка! Спасибо за помощь
2. Не стесняйтесь пометить это как ответ, если это ответило на ваш вопрос @ T. Huber
Ответ №2:
При первом вызове input
с if
инструкцией он получит входные данные от пользователя. Предположим, вы ввели допустимую строку, тогда длина не будет равна нулю и if
блок не будет выполнен. Итак, вы переходите к else
блоку, где вы снова получаете новый ввод от пользователя; Это отбрасывает предыдущий ввод, который вы получили, поскольку вы не сохраняли его ни в одной переменной. Таким образом, для каждого допустимого ввода, который вы вводите, в список добавляются только альтернативные элементы.
Ваш код добавит все входные данные, которые вы вводите в список, когда вы поочередно нажимаете enter
клавишу и действительный ввод в том же порядке.
Я добавил сюда правильный код:
def read_lines():
lines = []
contin = True
while contin:
string = input()
if len(string) == 0:
contin = False
else:
lines.append(string)
return(lines)