- Python
Python 实现角谷猜想(冰雹猜想)教程
- 2025-5-17 20:25:53 @
Python 实现角谷猜想(冰雹猜想)教程
什么是角谷猜想(Hailstone Conjecture)?
角谷猜想(又称冰雹猜想、Collatz 猜想) 是一个著名的数学未解难题之一,由德国数学家 Lothar Collatz 在1937年提出。
📌 猜想规则:
对于任意一个正整数 n
:
- 如果
n
是 偶数,就将其除以 2:n = n // 2
- 如果
n
是 奇数,就将其乘以 3 并加 1:n = 3 * n + 1
- 不断重复上述过程,最终总会得到
1
。
⚠️ 目前这个猜想尚未被证明,但已验证对所有小于非常大数值的正整数都成立。
💡 示例演示
我们以 n = 6
为例:
6 → 3 → 10 → 5 → 16 → 8 → 4 → 2 → 1
总共经过了 8 步,最终到达 1。
✅ 教学目标
本教程将教你如何用 Python 编写一个程序来模拟角谷猜想的过程,并输出每一步的结果。
🔧 编程实现步骤
第一步:获取用户输入
我们可以让用户输入一个正整数:
n = int(input("请输入一个正整数:"))
第二步:检查输入是否合法
确保输入是大于 0 的正整数:
if n <= 0:
print("请输入一个大于0的正整数!")
else:
# 执行角谷猜想逻辑
第三步:执行角谷猜想过程
使用一个 while
循环不断进行变换,直到 n == 1
:
steps = 0 # 记录步数
print(f"开始计算角谷猜想序列(初始值为 {n}):")
print(n)
while n != 1:
if n % 2 == 0:
n = n // 2
else:
n = 3 * n + 1
print(n)
steps += 1
第四步:输出总步数
最后输出一共经历了多少步:
print(f"总共经历了 {steps} 步到达 1。")
🧠 完整代码示例
# 角谷猜想(Collatz Conjecture)Python 实现
n = int(input("请输入一个正整数:"))
if n <= 0:
print("请输入一个大于0的正整数!")
else:
steps = 0
print(f"开始计算角谷猜想序列(初始值为 {n}):")
print(n)
while n != 1:
if n % 2 == 0:
n = n // 2
else:
n = 3 * n + 1
print(n)
steps += 1
print(f"总共经历了 {steps} 步到达 1。")
📈 进阶功能建议(可选)
你可以在此基础上增加以下功能,提升学习效果:
✅ 1. 记录整个操作过程为列表
sequence = [initial_n]
while n != 1:
if n % 2 == 0:
n = n // 2
else:
n = 3 * n + 1
sequence.append(n)
print("完整序列:", sequence)
✅ 2. 输出最大值和长度
print("最大值为:", max(sequence))
print("序列长度为:", len(sequence))
✅ 3. 绘制图像(需要 matplotlib 库)
import matplotlib.pyplot as plt
plt.plot(sequence, marker='o')
plt.title("角谷猜想变化曲线")
plt.xlabel("步数")
plt.ylabel("数值")
plt.grid(True)
plt.show()
🎯 小练习
尝试完成以下练习,加深理解:
- 输入
7
,观察其角谷序列并统计步数。 - 修改代码,让程序可以连续输入多个数字,直到用户输入
0
为止。 - 写一个函数
collatz(n)
,返回该数到达1
所需的步数。
📚 总结
通过本次教程,你学会了:
- 什么是角谷猜想
- 如何用 Python 模拟角谷猜想过程
- 使用了输入处理、条件判断、循环等基础编程技巧
- 可以进一步拓展图表可视化、数据存储等功能
📢 最后一句话
“无论起点多高,终会回到1。” —— 这就是神秘而美丽的角谷猜想!
如果你喜欢这个教程,欢迎继续探索更多 Python 数学编程内容哦 😊
2 条评论
-
admin SU @ 2025-5-17 20:27:51
# 程序要求输入一个整数, # 求经过多少次可得到自然数 1。 def fun(n, cnt): #if ① : if n == 1: print(cnt) return else: if n % 2 == 0:#如果是偶数, n //=2 #则除以 2 #② #cnt += 1 fun(n, cnt+1) else: #③ n = n * 3 + 1 #cnt += 1 fun(n, cnt+1) #fun(5, ④ ) fun(5, 0 )
-
2025-5-17 20:27:35@
- 1