冰雹序列长度关闭

时间:2015-03-01 01:32:36

标签: python nested-loops

我正在做一个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()

1 个答案:

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