Python - Простая программа ввода зависает в операторе ввода - PullRequest
1 голос
/ 18 июня 2020

Я пишу простую программу, которая берет 5 чисел, помещает их в список, делит каждое число на 2 и печатает список вывода.

list1 = input("Type 5 numbers: ").split()
for eachElement in list1:
    list1.append(str(int(eachElement)//2))
print("final numbers are "," ".join(list1[5:]))

ПРОБЛЕМА: программа зависает после первого ввода линия. В терминале он берет 5 чисел, но никогда не переходит на следующую строку.

Type 5 numbers: 56 67 84 45 78


В чем может быть проблема? Я использовал ввод с разделением во многих других программах, но он иногда зависает и большую часть времени работает.

Ответы [ 2 ]

1 голос
/ 18 июня 2020
for eachElement in list1:
    list1.append(str(int(eachElement)//2))

Тело l oop добавляет еще элементов к list1, поэтому for element in ... l oop никогда не закончится.

1 голос
/ 18 июня 2020

Вы перебираете свой список и , добавляя к нему одновременно, что означает, что ваш список растет до бесконечности.

Посмотрите, что происходит, когда вы печатаете что-то внутри l oop body:

list1 = input("Type 5 numbers: ").split()
for eachElement in list1:
    val = str(int(eachElement)//2)
    print("Appending", val)
    list1.append(val)
print("final numbers are "," ".join(list1[5:]))

Это напечатает:

Type 5 numbers: 1 2 3 4 5
Appending 0
Appending 1
Appending 1
Appending 2
Appending 2
Appending 0
Appending 0
Appending 0
...

Вы можете исправить это, поместив сначала новые числа в другой список:

list1 = input("Type 5 numbers: ").split()
list2 = []
for eachElement in list1:
    val = str(int(eachElement)//2)
    print("Appending", val)
    list2.append(val)
list1.extend(list2)
print("final numbers are "," ".join(list1[5:]))
...