Leerzeile vor Input?

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
shiela
User
Beiträge: 2
Registriert: Sonntag 17. Oktober 2021, 14:30

Hallo zusammen,

ich zerbreche mir seit Tagen den Kopf darüber und habe auch schon ein bisschen online nach einer Lösung gesucht, finde dort aber leider nichts. Mein Problem ist, dass ich immer vor meiner zweiten Input-Aufforderung (achieved points for the assignment) eine Leerzeile angezeigt bekomme. Kann mir jemand helfen, wie ich das verhindern kann? Vielen Dank auf jeden Fall :)

Mein Code:
pchallbool = False

while not pchallbool:
pchall = input("Enter your achieved points for the challenge: ")
pchallbool = pchall.isnumeric()

if pchallbool:
pchall=int(pchall)
if pchall > 20 or pchall < 0:
print("Input Error. Please enter a valid integer between 0 and 20", end=' ', sep=' ')
pchallbool = False
else:
pchallbool = True
else:
print("Input Error. Please enter a valid integer between 0 and 20", end=' ', sep=' ')


#Part 2
assigbool = False

while not assigbool:
assig = input("Enter your achieved points for the assignment: ")
assigbool = assig.isnumeric()

if assigbool:
assig=int(assig)
if assig > 70 or assig < 0:
print("Input Error. Please enter a valid integer between 0 and 70", end=' ', sep=' ')
assigbool = False
else:
assigbool = True
else:
print("Input Error. Please enter a valid integer between 0 and 70", end=' ', sep=' ')

Liebe Grüße
Jana

PS: Falls sich jemand fragt, was der Sinn hinter diesem Code ist - der Code geht nachher noch weiter, hab hier nur einen Teil davon hochgeladen, damit es keine sinnlosen Informationen gibt.
JonSnow
User
Beiträge: 8
Registriert: Montag 27. September 2021, 12:12

Hallo liebe Jana,

ich habe Deinen Code bei mir ausgeführt und kann Dein Problem leider nicht nachvollziehen. Welche Leerstelle hast Du zu beklagen? Kannst Du bitte einen Screenshot schicken? Bei mir sieht alles so aus wie es vermutlich aussehen soll, ohne dass ich einen Fehler feststellen könnte:

Ich habe Deinen Code in BB-Tags gesetzt, da in Deiner Darstellung sämtliche Einrückungen fehlen.

Code: Alles auswählen

pchallbool = False

while not pchallbool:
    pchall = input("Enter your achieved points for the challenge: ")
    pchallbool = pchall.isnumeric()

if pchallbool:
    pchall=int(pchall)
    if pchall > 20 or pchall < 0:
        print("Input Error. Please enter a valid integer between 0 and 20", end=' ', sep=' ')
        pchallbool = False
    else:
        pchallbool = True
else:
    print("Input Error. Please enter a valid integer between 0 and 20", end=' ', sep=' ')


#Part 2
assigbool = False

while not assigbool:
    assig = input("Enter your achieved points for the assignment: ")
    assigbool = assig.isnumeric()

if assigbool:
    assig=int(assig)
    if assig > 70 or assig < 0:
        print("Input Error. Please enter a valid integer between 0 and 70", end=' ', sep=' ')
        assigbool = False
    else:
        assigbool = True
else:
    print("Input Error. Please enter a valid integer between 0 and 70", end=' ', sep=' ')
Lieben Gruß,

JonSnow
"Alles ist Eins, außer der Null"- Wau Holland
Sirius3
User
Beiträge: 18253
Registriert: Sonntag 21. Oktober 2012, 17:20

Benutze keine Abkürzungen, keine Ahnung was eine pchal ist.
Typen sollten erst gar nicht in Variabennamen vorkommen. `pchallbool` wird dabei für zwei verschiedene Dinge benutzt, was nicht sein sollte.
Ein Flag für eine while-Schleife braucht man normalerweise gar nicht, weil man while-Schleifen auch per break verlassen kann.
Das Ergebnis von isnumeric muß man an gar keine Variable binden:

Code: Alles auswählen

while True:
    challenge_points_input = input("Enter your achieved points for the challenge: ")
    if challenge_points_input.isnumeric():
        challenge_points = int(challenge_points_input)
        if 0 <= challenge_points <= 20:
            break
    print("Input Error. Please enter a valid integer between 0 and 20")
isnumeric liefert True auch für Zeichen, die nicht per int umwandelbar sind int("㊱"), und liefern auch False für Strings, die per int umwandelbar sind.
Deshalb ist es besser, einfach das Umwandeln zu versuchen:

Code: Alles auswählen

while True:
    try:
        challenge_points = int(input("Enter your achieved points for the challenge: "))
        if 0 <= challenge_points <= 20:
            break
    except ValueError:
        pass
    print("Input Error. Please enter a valid integer between 0 and 20")
In welcher Umgebung führst Du den Code aus? Kann das ein Grund für die überflüssigen Leerzeilen sein?
shiela
User
Beiträge: 2
Registriert: Sonntag 17. Oktober 2021, 14:30

Vielen Dank für die Antworten (und die allgemeinen Verbesserungsvorschläge, werde die in Zukunft sicher öfter nutzen.) Hab den Code jetzt dank des Hinweises nochmal woanders (nicht in Spyder wie zuvor) ausgeführt und die Leerzeilen sind weg - Problem gelöst :)
Antworten