# 第48期-快乐的数字

Python是一门需要不断实践练习的编程语言,本文档将AI大学堂学员交流群的Python每周练习进行汇总,希望各位小伙伴能够多进行实践练习,逐渐爱上这门神奇的编程语言,掌握它并在生活中能够使用它。

# 1 问题描述

从一个正整数开始,用其每位数的平方之和取代该数,并重复这个过程,
直到最后数字要么收敛等于1且一直等于1,要么将无休止地循环下去且最终不会收敛等于1。
能够最终收敛等于1的数就是快乐的数字。

# 2 解题思路

  • 第一步: 重复循环,需要使用while True无限循环,到结果为1时结束循环
  • 第二步: 若结果重复出现两次不是一的数,那边会进入死循环,此时就不是快乐的数字

# 3 解题方法

x = input('请输入这个数:')
a,m=[x],0
while True:
    y = 0
    for i in range(len(str(a[m]))):
        y += (int(a[m]) // (10 ** i) % 10)**2
    if y == 1:
        print(True)
        break
    if y in a:
        print(False)
        break
    a.append(y)
    m+=1
1
2
3
4
5
6
7
8
9
10
11
12
13
14

第1行: 使用input函数输入一个数并赋值给x
第2行: 定义列表a和变量m,并为之分别赋值
第3行: 无限循环直到遇到break结束循环
第4行: 定义变量y并赋值为0,用于计算各位数平方和
第5-6行: for循环根据数字的长度,判断计算次数,每次都给变量y加上各位数的平方
第7-9行: 判断y是否等于1,若等于1,则输出true并结束循环
第10-12行: 若y不等于1,判断y是否之前出现过,若出现过,则表示会出现循环,不可能会再次等于1,输出false并结束循环
第13行: 上述条件均不满足,则在列表a中添加元素y,判断之后是否会再次出现
第14行: m作为索引,用于抓取列表最后一个元素

代码运行结果为:
image.jpg

# 小思考

代码中的m可不可以去掉用别的更简单的方法呢?

# 4 视频解析

高清视频讲解,请查看AI大学堂Python基础实战100例 (opens new window)
关注『讯飞AI大学堂』公众号,发送 python100 即可领取Python基础实战100例源代码
AI大学堂公众号.png

更新于: 12/28/2021, 7:43:14 AM