Nach einiger Zeit wieder Python- HILFE!!

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
MalcolmYoung
User
Beiträge: 10
Registriert: Sonntag 24. Oktober 2010, 09:50

Hi Leute,

nach einiger Zeit wollte ich wieder in die Python-Programmierung einsteigen und habe zum Einstieg folgendes Programm geschrieben, es sollte eig. von 1 bis zu vom Benutzer angegebenen Zahl zählen und bei der Eingabe einer
Nicht-Ganzzahl wieder zum Anfang springen und die Meldung "Bitte Zahl angeben" ausgeben.

Funktioniert alles super nur ist der Output immer:

Bitte Zahl eingeben:
0


Neben der 0 kann man dann normal den Input angeben...
Warum wird die 0 angezeigt??
Hier der Syntax:

Code: Alles auswählen

while 1==1:
        print("Zahl eingeben:")

    try:
            p=input(int());
            for i in range(1, p+1):
                print(i);
    except:
            print("Zahl angeben!");
        
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

1. Mach die ";" weg.
2. Korrigiere die Einrückungen
3. Was soll deiner Meinung nach "input(int())" machen? Probiere mal aus, was "int()" wohl ausgibt und lies dann nach, was passiert, wenn du das Ergebnis von "int()" an "input" übergibst. Dann wunderst du dich wahrscheinlich nicht mehr, wo die "0" herkommt. Und dann fällt bestimmt auch der Groschen, warum "p" nicht dass enthält, was du glaubst und warum daher die Schleife nicht funktioniert.
4. Aus den Klammern hinter "print" schließe ich, dass du Python 3 benutzt. Beachte, falls du ein Beispiel aus einem Lehrbuch für Python 2.x abgetippt hast, dass sich auch die Semantik von "input" bei Python 3 geändert hat.
5. Einfach nur "except" ist schlechter Stil. Du erwartest einen ValueError, also fange auch nur den ab.

Stefan
MalcolmYoung
User
Beiträge: 10
Registriert: Sonntag 24. Oktober 2010, 09:50

ok


Nein habe das nirgends abgetippt...

die ";" sind echt hirnverbrannt (PHP-Verblödung)^^.

die Schleife funktioniert ja!!! Der die einrückung ist im originalsource auch richtig!!


danke vorerst mal
MalcolmYoung
User
Beiträge: 10
Registriert: Sonntag 24. Oktober 2010, 09:50

Habs!!

Also so die funktionierts jetzt

Code: Alles auswählen

while 1==1:
    print("Zahl eingeben:")

    try:
        p=int(input())
        for i in range(1, p+1):
            print(i)
    except:
        print("Zahl angeben!")
        
Das mit valueerror mach ich noch zu verfeinern.

Ty Euer Mal
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Wäre nicht `while True` lesbarer?

Stefan
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Zudem würde auch "while 1:" reichen, da es ja auch True ist.

Ich bevorzuge, wenn ich schon eine Endlosschleife einbaue auch "while True:".
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Außerdem sollte man immer nur konkrete Exceptions abfangen. In diesem Falle also wohl einen ValueError.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Antworten