我正在做一个hailstone序列程序,它给出了具有最大周期和周期长度的数字。我已经完成了很多工作,但是当我检查数值时,长度总是偏离+1,我似乎无法找出原因。我可能缺少一些非常简单和愚蠢的东西,但我很感激帮助。 这是我的代码:
def main():
x = int(input("Enter starting number of the range:"))
y = int(input("Enter ending number of the range:"))
while (x<1):
return main()
while ((y<x) or (y<1)):
return main()
z = y +1
for n in range(x,z):
max_length = 0
length = 0
seq = []
while n != 1:
s = (n,seq.append(n))
if n % 2 == 0:
n = n // 2
length += 1
else:
n = (n * 3) + 1
length += 1
if n == 1:
seq.append(n)
length += 1
if length > max_length:
max_length = length
max_seq = seq[:]
print ("The number", max_seq[0], "has the longest cycle length of", max_length)
main()
答案 0 :(得分:0)
你发布的代码很可能是由一个非常专注的人提供的,但它有很多问题(尤其是你选择的2个空格缩进而不是4个)。根据提供的情况,它根本没有运行,可能是因为print
语句的缩进。这一行:
s = (n,seq.append(n))
指定一个从未使用过的变量s
。您还可以为您测试的max_length
的每个值重置n
,这样您只需报告找到的最后一个长度。
我在下面提供自己的解决方案:
def hailstone(n, ht):
ht += 1
if n == 1:
return 1, ht
if n % 2:
return hailstone(3*n+1, ht)
return hailstone(n/2, ht)
# Change the next line to set limits as appropriate
nmin, nmax = 1,10
max_n, max_len = None, 0
for n in range(nmin, nmax+1):
ht = 0
dummy, ht = hailstone(n, ht)
if ht > max_len:
max_n, max_len = n, ht
print(max_n,max_len)