Python循环冻结没有错误

时间:2016-07-19 21:15:40

标签: python python-3.x

我正在尝试在Python中创建一个代码,该代码显示使用简单算法从任意数字到达​​一个所需的步骤数。这是我的代码:

print('Enter the lowest and highest numbers to test.')
min = input('Minimum number: ')
min = int(min)
max = input('Maximum number: ')
max = int(max) + 1
print(' ')
for n in range(max - min):
    count = 0
    num = n
    while not num == 1:
        if num % 2 == 0:
            num = num / 2
        else:
            num = (num * 3) + 1
    count = count + 1
    print('Number: '+str(int(n)+min)+'   Steps needed: '+count)

它冻结而不显示错误信息,我不知道为什么会发生这种情况。

2 个答案:

答案 0 :(得分:1)

1)您正在错误地调用range()

您的代码:for n in range(max - min):生成的数字范围从0开始,以max-min结束。相反,您希望数字范围从min开始,到max结束。

试试这个:

for n in range(min, max):

2)您正在执行浮点除法,但此程序应仅使用整数除法。试试这个:

num = num // 2

3)您正在更新错误循环上下文中的count变量。尝试一次缩进。

4)你的最后一行可能是:

print('Number: '+str(n)+'   Steps needed: '+str(count))

程序:

print('Enter the lowest and highest numbers to test.')
min = input('Minimum number: ')
min = int(min)
max = input('Maximum number: ')
max = int(max) + 1
print(' ')
for n in range(min, max):
    count = 0
    num = n
    while not num == 1:
        if num % 2 == 0:
            num = num // 2
        else:
            num = (num * 3) + 1
        count = count + 1
    print('Number: '+str(n)+'   Steps needed: '+str(count))

结果:

Enter the lowest and highest numbers to test.
Minimum number: 3
Maximum number: 5

Number: 3   Steps needed: 7
Number: 4   Steps needed: 2
Number: 5   Steps needed: 5

答案 1 :(得分:0)

它似乎陷入了while not num == 1循环。请记住,range()从0开始,因此num首先设置为0,可以被2整除,因此将重置为0/2 ...再次为0!打破循环永远不会达到1。

编辑:我之前说count = 0需要移动。实际上,仔细观察似乎只需要在count = count + 1循环下移动while行。