我在写一个简单的程序,取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
会有什么问题呢? 我在许多其他程序中使用过带有split的输入,但它有时会挂起,大部分时间都能工作。
您正在迭代您的列表并同时向其追加,这意味着您的列表将增长到无穷大。
观察当您在循环体中打印某些内容时会发生什么:
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:]))
for eachElement in list1:
list1.append(str(int(eachElement)//2))
循环体将更多的元素添加到list1
中,因此for element in...
循环将永远不会结束。