如何在Collatz序列输出的首位纳入用户输入的初始值
Collatz序列初始值缺失的代码修正
问题原因
现有代码的逻辑是:拿到用户输入的初始值后直接进入运算循环,仅将每次循环计算得到的新值追加到序列列表,全程没有把用户输入的初始n值本身存入序列,因此最终输出会漏掉序列最开头的初始节点。
比如输入6时,第一次循环计算得到的第一个值是3,代码直接把3作为序列的第一个元素存入,自然就丢失了初始值6。
最小改动修正方案
不需要调整原有循环的判断规则、分支运算逻辑,只需要在进入循环前,把初始n值追加到序列列表中即可,修正后的完整代码如下:
seq = [] n = int(input("\nEnter a number (greater than 1): ")) # 补全初始值存储:将用户输入的数值作为序列第一个元素 seq.append(n) while (n > 1): if n % 2 == 0: n = n // 2 else: n = 3 * n + 1 seq.append(n) print() print(*seq)
修正后运行效果
输入数值6时,控制台将输出完整的Collatz序列:6 3 10 5 16 8 4 2 1
完全满足“序列首位包含用户输入初始值”的要求。
内容的提问来源于stack exchange,提问作者flowness
相关产品推荐
相关产品推荐

