如何对数字列表进行操作?
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)
我正在尝试对数字列表执行 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)