如何对数字列表进行操作?

How to do operation on list of numbers?

我正在尝试对数字列表执行 Collatz conjecture 以检查哪个数字“持有”最多。问题是代码一直告诉我“TypeError:% 不支持的操作数类型:'list' 和 'int'”

Collatz = range(1, 1001)
counting = 0
print(Collatz)
while Collatz != 1:
    if Collatz % 2 == 0:
        Collatz = int(Collatz / 2)
        print(Collatz)
        counting += 1
    else:
        Collatz = int(Collatz * 3 + 1)
        print(Collatz)
        counting += 1
print(counting)

如果有输入就很好用... 非常感谢帮助:)

尝试获取所有范围的列表,其中包含一个数字以及达到“1”所花费的时间,或者哪一个是最长的。 例如: 数字 1 走了 1 步到达“1” 数字 2 走了 2 步才到达“1” 数字 3 走了 8 步才到达“1”等等

数字 153 走了 736 步才到达“1”(IDK,仅供示例)

此代码有效:

def get_collatz(n):
    i=1
    while True:
        if n % 2 == 0:
            n /= 2
        else:
            n = 3 * n + 1
        if n == 1:
            return(i)
        i += 1
        
for i in range(1, 100000):
    print(i, get_collatz(i))

如果你想知道走了最多步的数字,你可以这样做:

steps = dict()
for i in range(1, 100000):
    steps[i] = get_collatz(i)

n_max = max(steps, key=steps.get)
total_steps = steps[n_max]
print(f'Number {n_max} took {total_steps} steps to reach 1.')

这会打印:

Number 77031 took 350 steps to reach 1.

您还可以创建排序字典:

sorted_steps = dict(sorted(steps.items(), key=lambda item: item[1]))

当您使用 range() 时,您会得到该范围内的数字列表。您的意思是 number 而不是 Collatz 因为在 for 循环中您正在遍历 Collatz 并且值在 number 中。 while 循环没有做任何事情,所以我建议删除它。

使用此代码:

Collatz = range(1, 1001)
counting = 0
for number in Collatz:
    if number % 2 == 0:
        number = int(number / 2)
        print(number)
        counting += 1
    else:
        number = int(number * 3 + 1)
        print(number)
        counting += 1
print(counting)