Hinweis: Ich habe versucht herauszufinden, warum meine while-Anweisung nicht als False ausgewertet wurde, wenn die Ganzzahl war. Daher glaube ich nicht, dass es sich um ein DuplikatWhile-Schleife bricht nicht ab, obwohl die Bedingung erfüllt ist (Collatz Sequence)
handeltDoing eine Automatisierung der langweiligen Sachen Übung in Python, wo das Programm eine Eingabe erhält und reduziert es auf 1 mit dem folgenden Algorithmus.
#even/2
#odd * 3 + 1
def collatz():
print("Enter number:")
number = input()
try:
data = int(number) # Input Validation
while int(data) != 1:
if data % 2 == 0: #Number is even
data = int(data/2)
print(data)
if data % 2 == 1: # Number is odd
data = int(3*data+1)
print(data)
except:
print("Please input a valid value")
collatz()
collatz()
Anstelle der while-Schleife Zerbrechen, wenn die Anzahl auf 1 läuft die Schleife weiter reduziert wird, und es multipliziert 1 mit 3 und addiert 1 (genauso wie normale ungerade Zahl). Btw viele Int-Konvertierungen wurden gemacht, da ich dachte, dass es einen Fließkommawert zurückgegeben hat.
Also bitte sagen Sie mir, wo sind die unnötigen Int-Konvertierungen und wie man es mit einer while-Anweisung zu brechen. Jede Bereinigung Code geschätzt wird
Vielen Dank für alle Tipps und Verbesserungen! Wenn ich den ganzen Code in einer Funktion belassen würde, warum brach meine while-Schleife nicht, wenn n oder in meinem Fall Daten 1 waren? –
@KOOTSHOOTS Verstanden! Das liegt daran, dass Sie zwei "if" -Anweisungen machen, also würde der Fall, in dem 'data'' 2' war, den ersten Test bestehen und durch '2' dividieren, um' 1' zu bekommen, aber dann würde der zweite 'if' Sehen Sie, es war jetzt seltsam und halten Sie es durch Multiplizieren mit "3" und Hinzufügen von "1". Deshalb funktioniert meine Funktion, weil ich ein "else" benutzt habe. **:) ** Bitte akzeptieren Sie dann! –