【发布时间】:2025-11-23 02:55:01
【问题描述】:
我对循环和声明变量有疑问。目前我正在制作一个关于 Collatz 猜想的程序,该程序应该检查从一定数量的 Collatz 序列中达到一个最大的步骤是什么。这是我的代码:
start_num = int(input("insert a starting Number > "))
how_many = int(input("how many times you want to check? >"))
def even_or_odd(number):
if number % 2 == 0:
return 'isEven'
else:
return 'notEven'
def collatz(n):
z = n
counter = 0
while True:
if n != 1:
if even_or_odd(n) == 'isEven':
n = n/2
counter += 1
continue
if even_or_odd(n) == 'notEven':
n = (n*3)+1
counter += 1
continue
else:
print('number ' + str(z) + ' reached 1 with : ' + str(counter) + ' steps')
return counter
break
def check_biggest_steps(steps_before, steps_after):
if steps_before > steps_after:
return steps_before
if steps_after > steps_before:
return steps_after
if steps_after == steps_before:
return steps_after
def compute_collatz(n_times, collatz_number):
for _ in range(n_times):
before = collatz(collatz_number)
collatz_number += 1
after = collatz(collatz_number)
collatz_number += 1
biggest_steps = check_biggest_steps(before, after)
print('Biggest Steps is :' + str(biggest_steps))
compute_collatz(how_many, start_num)
这个biggest_steps 变量总是返回最后两个步骤。我知道导致这个问题的原因是 biggest_step 变量位于循环内,但我无法让它在任何地方工作,不知道该怎么做。谢谢
【问题讨论】:
-
你的
even_or_odd函数相当......好吧,奇怪。将其命名为even或is_even会更正常,并让它返回True或False,因此调用代码可以执行if is_even(n):。如果你这样做,它是一个单行 - 不需要if声明,只需return not n % 2- 所以你可能决定取消该功能,而只使用 thatcollatz中的条件。同样,您可以将整个check_biggest_steps函数替换为max(before, after)。
标签: python python-3.x loops