如何打印所有快乐数判定结果为True的数字?
实现打印快乐数的修改方案
原代码问题梳理
- 没有封装可复用的判定逻辑,默认初始数值为0,无法遍历不同输入数字
- 返回结果为字符串格式的
'True'/'False',不便于后续逻辑调用
优化实现
首先把快乐数判定逻辑封装为独立函数,输入为待判定的整数,直接返回布尔值:
def is_happy(n: int) -> bool: # 迭代计算各位平方和,直到结果落到1或4 while n not in (1, 4): sum_sq = 0 for digit in str(n): sum_sq += int(digit) ** 2 n = sum_sq return n == 1
两种输出方案
因为快乐数是无限集合,不存在输出完所有的可能,提供两种常用实现:
方案1:指定范围打印快乐数
适合需要固定区间内所有快乐数的场景,修改起止数值即可调整范围:
# 示例:打印1到200范围内的所有快乐数 start = 1 end = 200 happy_numbers = [num for num in range(start, end+1) if is_happy(num)] print(f"{start}到{end}范围内的快乐数:") print(happy_numbers)
方案2:无限持续打印快乐数
从1开始逐个判定打印,程序会一直运行,按Ctrl+C即可手动终止:
num = 1 print("开始打印快乐数,按Ctrl+C终止运行:") while True: if is_happy(num): print(num, end=' ') num += 1
补充说明
如果需要保存输出结果,可以在打印位置增加写入文件的逻辑,避免终端输出过多内容被冲刷丢失。
内容的提问来源于stack exchange,提问作者Broski
相关产品推荐
相关产品推荐

