Ich habe ein Problem mit Schleifen und deklarieren Variablen. Momentan mache ich ein Programm über Collatz Conjecture, das Programm sollte prüfen, was die größten Schritte sind, um eine bestimmte Menge von Collatz Sequence zu erreichen. hier ist mein Code:Schleifen und Collatz-Vermutung
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)
diese biggest_steps
Variable, die die letzten 2 Schritte immer wieder zurückkehren. Ich weiß, was dieses Problem verursacht, ist, dass biggest_step
Variable innerhalb der Schleife befindet, aber ich kann es nicht überall funktionieren, weiß nicht, was zu tun ist. Danke
Ihre 'even_or_odd'-Funktion ist eher .. gut, seltsam. Es wäre normaler, es "even" oder vielleicht "is_even" zu nennen, und es würde entweder "True" oder "False" zurückgeben, so dass der aufrufende Code 'if is_even (n):'. Und wenn Sie es so machen, ist es ein One-Liner - keine Notwendigkeit für die "if" -Anweisung, nur 'return not n% 2' - also können Sie entscheiden, die Funktion zu beseitigen, und nur * das * Bedingung verwenden in 'collage'. Auf ähnliche Weise können Sie die gesamte 'check_biggest_steps'-Funktion durch' max (before, after) 'ersetzen. – lvc