Pytho123——快乐的数字

Pytho123——快乐的数字编写一个算法来确定一个数字是否 快乐 快乐的数字按照如下方式确定 从一个正整数开始 用其每位数的平方之和取代该数 并重复这个过程 直到最后数字要么收敛等于 1 且一直等于 1 要么将无休止地循环下去且最终不会收敛等于 1 能够最终收敛等于 1 的数就是快乐的数字

大家好,我是讯享网,很高兴认识大家。

编写一个算法来确定一个数字是否“快乐”。 快乐的数字按照如下方式确定:从一个正整数开始,用其每位数的平方之和取代该数,并重复这个过程,直到最后数字要么收敛等于1且一直等于1,要么将无休止地循环下去且最终不会收敛等于1。能够最终收敛等于1的数就是快乐的数字。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

例如19 就是一个快乐的数字,计算过程如下:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

  • 12 + 92 = 82
  • 82 + 22 = 68
  • 62 + 82 = 100
  • 12 + 02 + 02 = 1

当输入时快乐的数字时,输出True,否则输出False。 

 1、找规律,平方和结果中有4则为不快乐数字,有1则为快乐数字

首先,我们需要得到一个数字,判断它是几位数,然后分别取它的每一位数,平方再相加,如此循环下去,直到最后结果为1,输出True,否则,输出False。

那么,如果一个数字不是快乐数,它会不会无限循环下去呢?我们可以找几个数字来试一试。

2:22=4;42=16;12+62=37;32+72=58;52+82=89;82+92=145;12+42+52=42;42+22=20;22+02=4......

21:22+12=5;52=25;22+52=29;22+92=85;82+52=89;82+92=145;12+42+52=42;42+22=20;22+02=4......

35:32+52=34;32+42=25;52=25;22+52=29;22+92=85;82+52=89;82+92=145;12+42+52=42;42+22=20;22+02=4......

57:52+72=74;72+42=65;62+52=61;62+12=37;32+72=58;52+82=89;82+92=145;12+42+52=42;42+22=20;22+02=4......


讯享网

123:12+22+32=14;12+42=17;12+72=50;52+02=25;22+52=29;22+92=85;82+52=89;82+92=145;12+42+52=42;42+22=20;22+02=4......

91:92+12=82;82+22=68;62+82=100;12+02+02=1

由此,我们可以看出,如果是快乐数,那么最后计算的值为1;而不是快乐数,最后计算的结果一定有4。因此可以限定循环的判断条件为1和4,即当和为1或4时跳出循环,以此来防止无限循环。

#1.找规律 #所有不快乐数的数位平方和计算,最後都会进入 4 → 16 → 37 → 58 → 89 → 145 → 42 → 20 → 4 的循环中 #即所有不快乐数字计算平方和时总会出现 4 #所有快乐数字计算平方和时最后一定等于 1 def is_happy(n): while True: sqsum=0 while n>0: #注意此处用循环(取余和整除)较简洁!!!! sqsum += (n%10)2 n = int(n//10) if sqsum == 1: return True elif sqsum ==4: return False else: n=sqsum #类似递归,若平方和sqsum不等于1或4,则令n=sqsum,继续执行 try : n = int(input()) print(is_happy(n)) except NameError as NE: print("类型错误,请输入一个正整数!",NE) #输出 “类型错误,请输入一个正整数!”及错误类型的内容 # else: # print("没有发生异常。")

讯享网

输出结果:

2、利用集合,将平方和结果存入列表中

当平方和结果(sqsum)等于1时,返回True
当平方和结果(sqsum)在列表中时,说明陷入死循环,返回False
当平方和结果(sqsum)不在列表中,也不等于1时,递归调用count函数,继续计算平方和结果,直到sqsum满足==1或==4,返回True/False

讯享网#2.利用集合 """计算平方和的结果,并将其存入列表中 当结果等于1时,返回True 当结果在列表中时,说明陷入死循环,返回False 当结果不在列表中,也不等于1时,递归调用count函数,继续计算平方和结果,并返回True/False""" def is_happy2(n): def count(m): lst.append(int(m)) #将m转化为数值 sqsum = 0 for i in m: sqsum += int(i)2 #求平方和 if sqsum == 1: #==1为快乐数,返回True return True elif sqsum in lst: #==4不为快乐数,返回False return False else: return (count(str(sqsum))) #!=1且!=4,则递归调用count函数,直到sqsum满足==1或==4,返回True/False lst = [] #创建空列表 m = str(n) #m为字符串 return count(m) try: n = eval(input()) print(is_happy2(n)) except NameError as NE: print("输入类型错误,请输入一个整数!",NE) 

输出结果:

小讯
上一篇 2025-01-14 20:58
下一篇 2025-03-07 23:00

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/18635.html