ループと変数の宣言に問題があります。現在、私はCollatz推測についてのプログラムを作っています。プログラムは、Collatz Sequenceの一定量から到達するための最大のステップが何であるかを確認する必要があります。ここに私のコード:ループと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
変数は常に最後の2ステップを返します。私はこの問題の原因を知っているループの中にあるbiggest_step
変数ですが、私は何をするかわからないどこでも働くことができません。ありがとう
あなたの 'even_or_odd'関数はむしろ奇妙です。 'even'または' is_even'という名前をつけて、 'True'か' False'のどちらかを返すのが普通です。そうすれば、呼び出しコードは 'if is_even(n):'を実行できます。あなたがそのようにすれば、その一行 - 'if'文の必要はなく、単に' return not n%2' - だからあなたはその関数をやめ、* that *条件'collatz'で。同様に 'check_biggest_steps'関数全体を' max(before、after) 'に置き換えることもできます。 – lvc