如何复用Python中Collatz猜想的判断逻辑以避免重复代码?
Collatz猜想Python实现优化方案
原代码存在的问题
- 输入检查不完整:仅处理负数,未覆盖0和非整数输入,且第二次输入未转换为整数类型
- 嵌套循环导致逻辑冗余:多次重复判断
c0 == 1,代码结构复杂 - 输入提示重复,用户体验不佳
优化后的代码
# 确保获取合法的正整数输入 while True: try: c0 = int(input("Enter a non-negative and non-zero integer number: ")) if c0 > 0: break print("请输入大于0的整数!") except ValueError: print("输入无效,请输入整数!") steps = 0 # Collatz猜想核心逻辑 while c0 != 1: if c0 % 2 == 0: c0 = c0 // 2 # 使用整数除法避免浮点数问题 else: c0 = 3 * c0 + 1 steps += 1 print(c0) print(f"steps = {steps}")
优化说明
- 输入处理优化:通过
try-except捕获非整数输入,循环直到用户输入合法正整数,一次性覆盖负数、0、非整数的异常情况,无需重复编写输入提示 - 逻辑简化:采用单层
while循环,仅在循环入口判断是否达到终止条件(c0 == 1),内部单次判断奇偶性执行对应操作,消除原代码的嵌套循环和重复判断,逻辑更清晰 - 类型稳定性:用整数除法
//替代浮点除法/,保证c0始终为整数,避免后续判断出现类型问题 - 代码可读性:结构扁平化,减少冗余代码,便于维护和理解
内容的提问来源于stack exchange,提问作者Dream
相关产品推荐
相关产品推荐

