Warum klappt es nicht? Anfängerfrage

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
TheAccuri
User
Beiträge: 1
Registriert: Dienstag 18. Juli 2017, 13:49

Hi,

ich habe vor kurzem angefangen Python mithilfe des Werkes "A byte of python" zu lernen. Als erste Programmiersprache. Um die gelernten Sachen zu festigen versuche ich nach den vorgegebenen Versuchen das gelernte ein wenig zu kombinieren. Bei meinem letzten eigenen Versuch bin ich allerdings auf ein "Problem" gestoßen.

http://imgur.com/a/QTCMJ

Alles funktiniert tadellos bis darauf dass er nie die richtige Zahl erkennt. Heißt,gebe ich die oben definierte Zahl "i" ein wirft er mir trotzdem die Reaktion für ungleich i aus. Wo liegt mein Problem. Achtung ich hab hier wie gesagt einfach ausprobiert. Davon steht nichts in A byte of python. Ich habe sozusagen eigenständig versucht mehrere Sachen aus A byte of Python zu verbinden. Nicht das jmd auf den Gedanken kommt im demBbuch wird Mist verzapft.

Danke schonmal
LG
BlackJack

@TheAccuri: Es ist sinnvoller Quelltext als Text in den Beitrag einzufügen statt als Bild. Ein Bild sind mehr Daten, ist extern gehostet, und man kann es nicht einfach mal kopieren und ausprobieren. Deshalb hier noch mal Dein Code als Text (ich hoffe die OCR-Software hat nichts kaputt gemacht):

Code: Alles auswählen

print('Welcome to the lottery')
i = 234567
running = True
while running:
    guess = input('Enter your lottery numbers : ')
    if len(guess) != 6:
        print('The number must have exactly 6 digits')
        continue
    if len(guess) == 6:
        int(guess)
        if guess == i:
            print('Congratulations you just won the jackpot')
            running = False
        elif guess != i:
            print('Sorry maybe next time')
        else:
            print('An unknown error occurred!')
            continue
else:
    print('Have a nice day')
Das Problem ist das der Benutzer Text eingibt und Du den Text mit einer Zahl vergleichst. Das ist *immer* ungleich. Du musst entweder den Text in eine Zahl oder die Zahl in Text umwandeln zum Vergleichen.

Ich würde die gesuchte Zahl bereits als Text in den Quelltext schreiben. Dann kann man auch die ”magische” 6 im Quelltext loswerden und die Länge mit der tatsächlichen Länge der gesuchten Zahl vergleichen. Und `i` ist ein sehr schlechter Name dafür. Bei `i` erwartet der Leser eine Zahl die als Index verwendet wird, meistens als Laufvariable in einer Schleife. `secret` wäre ein Beipiel für einen passenden Namen. Gute Namen sind beim Programmieren wichtig. Die können entscheidend dafür sein ob der Leser, und das ist auch der Programmierer selbst, den Code versteht und richtig versteht, was wichtig zum Vermeiden von Fehlern ist.

`running` kann man sich sparen wenn man eine Endlosschleife schreibt und die dann an passender Stelle mit ``break`` verlässt.

Es macht bei ``if`` in der Regel keinen Sinn in einem folgenden ``if`` genau das Gegenteil zu prüfen. Und bei ``elif`` schon gar nicht. Genau dafür ist ``else`` da. Wie müssten denn Deiner Meinung nach die Werte hinter `guess` und `i` aussehen das der letzte ``else``-Zweig in der Schleife ausgeführt wird? Dazu müssten `guess` und `i` ja weder gleich noch ungleich sein‽

Das ``else`` zum ``while`` macht keinen Sinn weil es kein ``break`` in der Schleife gibt.
Antworten