我正在尝试在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)
它冻结而不显示错误信息,我不知道为什么会发生这种情况。
答案 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
行。