Почему моя программа добавляет только все остальные входные данные в мой список?

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