Das Collatz Problem

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
nb5code
User
Beiträge: 23
Registriert: Freitag 13. März 2015, 18:20

Hallo ich habe ein problem könntet ihr mir vielleicht helfen den code zu optimieren, da ich gerade nicht weiter komme

Code: Alles auswählen

Das Collatz-Problem
xn=input("Geben sie die zu berechnende Zahl an: ")
a = int(input("Wie viele Berechnungen?"))
for xn in range(a):
    if xn%2==0: 
        xn=xn/2 
        print("xgerade = ",xn)
    elif xn%2==1:
        xn=3*xn+1
        print("xungerade = ",xn)
es kommen immer falsche ergebnisse heraus

mein problem ist, dass ich xn mit dem modulo berechne und dann kommt halt das ergebnis von dem modulo raus ich möchte eigentlich , dass wenn die zahl gerade ist dann wird xn = xn/2 gerechnet und wenn es ungerade ist wird xn=3*xn+1 gerechnet

https://de.wikipedia.org/wiki/Collatz-Problem

Code: Alles auswählen

Geben sie die zu berechnende Zahl an: 7
Wie viele Berechnungen?10
xgerade =  0.0
xungerade =  2.0
xgerade =  1.0
xungerade =  5.0
xgerade =  2.0
xungerade =  8.0
xgerade =  3.0
xungerade =  11.0
xgerade =  4.0
xungerade =  14.0
das war dann die terminal ausgabe
BlackJack

@nb5code: Das `xn` was der Benutzer eingibt wird vom Programm für rein gar nichts verwendet. Zeile zwei könntest Du komplett weglassen ohne das sich an der Berechnung in dem Programm etwas ändert.

Wenn das vom Benutzer eingegebe `xn` in einer *Rechnung* verwendet werden *würde*, dann würden Dir auch sehr schnell Probleme entstehen weil das keine Zahl sondern eine Zeichenkette ist.
nb5code
User
Beiträge: 23
Registriert: Freitag 13. März 2015, 18:20

@Blackjack Und wie müsste es dann aussehen wenn der Benutzer eine zahl eingeben kann und es dann alles berechnet wird?
BlackJack

@nb5code: Wie man den Benutzer ein Zahl eingeben lässt weisst Du, das hast Du an anderer Stelle ja schon gemacht.

Schau doch noch mal *genau hin* woher die Werte von `xn` innerhalb der Schleife kommen. Wenn Du die zweite Zeile entfernst, dann ist das in der Schleife ja trotzdem definiert.
nb5code
User
Beiträge: 23
Registriert: Freitag 13. März 2015, 18:20

@Blackjack Dann wird es in der for schleife definiert aber wie schaffe ich das ich eine BenutzerEingabe einfuege
BlackJack

@nb5code: Wo kommt der Wert von `xn` in Zeile 5 denn her? Und welchen Wert hat `xn` am Anfang vom jedem Schleifendurchlauf? Welchen beim ersten, welchen beim zweiten, und so weiter?
nb5code
User
Beiträge: 23
Registriert: Freitag 13. März 2015, 18:20

@Blackjack Ich bin gerade verwirrt koennten sie das auflösen

xn hat am Anfang jedes schleifendurchlaufs offensichtlich null
BlackJack

@nb5code: Nein das ist nicht am Anfang von jedem Schleifendurchlauf 0. Dann müsste es ja bei jedem Schleifendurchlauf den gleichen Wert ausgeben. Einfach mal ein ``print(xn)`` gleich als erstes in der Schleife einfügen.
nb5code
User
Beiträge: 23
Registriert: Freitag 13. März 2015, 18:20

für Heute ists genug aber danke ich werde weiter versuchen @Blackjack
nb5code
User
Beiträge: 23
Registriert: Freitag 13. März 2015, 18:20

hat alles geklappt hier ist der code

Code: Alles auswählen

xn=int(input("Geben sie die zu berechnende Zahl an: "))
a = int(input("Wie viele Berechnungen?"))
for i in range(a):
    if xn%2==0: 
        xn=xn/2 
        print("xgerade = ",xn)
    elif xn%2==1:
        xn=3*xn+1
        print("xungerade = ",xn)
Antworten