【问题标题】:How can i sequence for a range(5,10000) until it hits 1?我如何对一个范围(5,10000)进行排序,直到它达到 1?
【发布时间】:2022-06-28 23:09:57
【问题描述】:

我是 python 新手,我目前正在为我的大学做一项任务。问题如下:

如果 x 是偶数,则 f(x) = x / 2,如果 x 是奇数,则 f(x) = 3*x+1,我如何构建一个从范围中选择一个数字的循环(5,10000 ) 并对其进行排序,只要它达到 1,它就会停止。现在我只完成了我的循环将它排序在不同的列表中。至少:D

这是我当前的代码:

  odd = []
 even = []

for num in range (5,10000):
    if num % 2 == 0:
        even.append(sum)
    else:
        if num % 2 == 1:
            odd.append(sum)

【问题讨论】:

  • 我不明白这部分:and sequences it for as long as if it hits 1, it stops 你能用不同的方式解释吗?您的代码似乎非常适合您的任务。代码range(5, 10000) 产生一个数字列表 -> 5, 6, 7, 8, ... ,9999,也许这就是你困惑的根源?
  • 您可以根据该小样本制作一个小示例和预期答案,以更好地展示目标

标签: python python-3.x


【解决方案1】:

这是著名的数学问题,称为 Collat​​z 猜想。为了简单起见,如果 x 是偶数,我们将执行函数 2x,如果 x 是奇数,我们将执行函数 3x+1直到变成 1。1 是这个序列的最小可能值。

import random
def collatz_sequence(x):
    seq = [x]
    if x < 1:
       return []
    while x > 1:
       if x % 2 == 0:
         x = x / 2
       else:
         x = 3 * x + 1
       seq.append(x)
    return seq
num = random.randint(5,10000)
print(collatz_sequence(num))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-20
    • 2015-06-03
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多