分别打印两位或更多位数的数字

时间:2019-12-17 01:38:29

标签: python list numbers

所以我做了一个有趣的collat​​z计算器(如果您不知道它的查找内容),我想记录达到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]

2 个答案:

答案 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%