所以我做了一个有趣的collatz计算器(如果您不知道它的查找内容),我想记录达到1所需的步骤,然后将该数据放入列表中。只要有一个大于2位的数字,它就会将数字分成列表中的两个不同位置。
这是代码
steps = 0
stepsList = []
numList = []
listCount = 0
while True:
numIn = int(input('enter number: '))
while True:
if numIn % 2 == 0:
numIn = numIn / 2
else:
numIn = (3 * numIn) + 1
print(numIn)
steps += 1
if numIn == 1:
numIn += 1
print('~~~')
print(str(steps) + ' steps')
stepsList.extend(str(steps))
print(stepsList)
break
说我输入数字27,而不是将其存储为[111],而是将其存储为[1,1,1]
答案 0 :(得分:0)
只需替换以下几行:
print(str(steps) + ' steps')
stepsList.extend(str(steps))
作者
print(steps, 'steps')
stepsList.append(steps)
如果您需要每个不同测试编号的步数,而不是累积计数器,那么也许还应该在外部循环开始时重置steps
计数器。
答案 1 :(得分:0)
stepsList = []
while True:
try:
numIn = int(input('enter number: '))
except KeyboardInterrupt:
break
steps = 0
while True:
if numIn % 2 == 0:
numIn = numIn / 2
else:
numIn = (3 * numIn) + 1
# print(numIn)
steps += 1
if numIn == 1:
numIn += 1
print('~~~')
print(str(steps) + ' steps')
stepsList.append(steps)
print(stepsList)
break
添加了一些清理和更好的ctrl-c处理:)
对我很好
enter number: 27
~~~
111 steps
[111]
enter number: 1
~~~
3 steps
[111, 3]
enter number: 4
~~~
2 steps
[111, 3, 2]
enter number: 6
~~~
8 steps
[111, 3, 2, 8]
enter number: 10
~~~
6 steps
[111, 3, 2, 8, 6]
enter number: ^C%