幸福数字计划

Program for happy numbers

所以快乐的数字是一个数字,从任意正整数开始,用它的各位数字的平方和代替这个数字,这个过程会一直重复,直到变成1,否则,会在一个循环中无限循环.那些数字,等1找到了,就是幸福的数字。

假设数字是 19,输出将为 true,因为该数字是一个快乐的数字。从19可以看出,我们会得到

12 + 92 = 82

82 + 22 = 68

62 + 82 = 100

12 + 02 + 02 = 1

这是我的代码:

def happy(n):
  s = list(str(n))
  sum = 0
  for i in s:
      sum += int(i)**2
  if sum == 1:
    return True
  else:
    happy(sum)
      

    
    

x = 0
if __name__=="__main__":
    n =int(input())
    print(happy(n)) # to check what it returns
    if happy(n):
      print("True")
    else:
      print("False")

因为 19 是一个快乐的数字,但我的函数总是 returns None 而不是 True。为什么会这样?

因为您没有return递归调用的结果,所以除非第一个计算已经产生一个结果,否则您不会return任何结果:

def happy(n):
  s = list(str(n))
  sum = 0
  for i in s:
      sum += int(i)**2
  if sum == 1:
    return True
  else:
    return happy(sum) # the return statement was missing here

在其他情况下,您必须 return happy(sum)

在其他情况下你必须 return 快乐(总和)0

因为你没有return你的递归调用的结果,所以除非第一个计算已经产生了一个,你不会return任何结果

唯一的问题是,如果您尝试使用会不断循环的非快乐数字(如 58),程序将会卡住。另一种验证方法,直到结果是一位数长,并验证它是否为 1.

def happy(n):
    while len(str(n)) > 1:
        n = sum(int(x)**2 for x in str(n))
    return (n == 1)