Python使用字典实现Collatz序列功能 求最长序列对应数值代码调试
考拉兹序列最长数计算代码修正
现有代码问题汇总
- 初始值设置错误:计算每个数的序列长度时,将
current初始值设为1,导致while current != 1的循环永远不会执行,所有数的序列长度都被记为0,正确初始值应为当前遍历的数i。 - 序列计算逻辑错误:循环中计算下一个数时,误用了函数入参
number而非当前数current,且使用普通除法/会得到浮点数,易引发后续计算异常,应改为整数除法//。 - 变量未定义就调用:调用
collatz函数时传入的number没有提前定义,也没有接收用户输入的逻辑,会触发变量未定义报错。 - 打印语句语法错误:
print = result是将Python内置的print函数覆盖为普通变量,不会执行打印操作,正确写法为print(result)。 - 计数逻辑缺失:初始数本身属于考拉兹序列的第一个元素,计数初始值应设为1而非0。
修正后完整代码
def collatz(max_num): seg_length = {} # 遍历所有小于等于上限的整数 for i in range(1, max_num + 1): current = i count = 1 # 初始数本身算序列第一个元素 while current != 1: if current % 2 == 0: current = current // 2 else: current = 3 * current + 1 count += 1 seg_length[i] = count # 找到序列长度最长的数 max_len = max(seg_length.values()) for num, length in seg_length.items(): if length == max_len: return num # 接收用户输入 input_num = int(input("请输入一个正整数:")) result = collatz(input_num) print(result)
内容的提问来源于stack exchange,提问作者amelia
相关产品推荐
相关产品推荐

