Wieso funktioniert das nicht :) - Python-Programmierung?

WeissBrot965  09.01.2024, 13:39

Lol wtf ist die Berufsschule wirklich so einfach?

iAmProgrammer 
Fragesteller
 11.01.2024, 08:57

ja, also in der Regel bekomme ich das auch immer easy hin, aber hier hackte es halt irgendwie. Aber sonst ist dieses Fach einfach ja .bzw. eigentlich alle Fächer

1 Antwort

So eine Bedingung kann nie erfüllt sein:

if Bestätigung.lower() == "Ja"

Überleg dir mal, warum. Tipp: Wozu machst du denn das lower()?

Bei der Gelegenheit kannst du dir auch mal überlegen, was bei einer Eingabe außer Ja oder Nein passieren sollte. Diesen Fall behandelst du nicht explizit. Oft ist es sinnvoll, alles außer "ja" als "nein" zu interpretieren.

Stilistischer Hinweis am Rande: es ist unüblich, Variablennamen mit "Sonderzeichen" (also Zeichen außerhalb des ASCII-Buchstabensatzes) zu verwenden. Manche Leute haben auch eine geradezu religiöse Abneigung gegen deutschsprachige Variablennamen. Mach es halt so, wie man es euch in der Schule vermittelt hat.

iAmProgrammer 
Fragesteller
 09.01.2024, 09:23

im prinzip hat lower hier wirklich keinen sinn wenn man genauer nachdenkt, denn warum sollte man den string in kleinbuchstaben wieder zurückgeben... hast recht

0
jo135  09.01.2024, 09:24
@iAmProgrammer

Die Idee, alle Eingaben auf Groß- oder Kleinschreibung zu normalisieren, ist schon schlau. Nur muss dann auch der Vergleichswert stimmen.

0
iAmProgrammer 
Fragesteller
 09.01.2024, 09:26
@jo135

dann müsste ich also auch die rechte seite mit der Antwort im lower() schreiben. also eben genauso "normalisieren" wie eben die linke Seite. Also die Bedingung (1:1) gleichsetzen mit der Antwort!?

1
JanMarcel01  09.01.2024, 09:54
@iAmProgrammer

Genau, oder einfach nur links ein lower() benutzen und rechts einfach „ja“ statt „Ja“ schreiben

0
iAmProgrammer 
Fragesteller
 09.01.2024, 09:59
@JanMarcel01
also ich habe jetzt folgenden code: 

def Zahlung(ticket_typ, preis):
while True:
        Zahlungsvorgang = input(f"Möchten Sie das Ticket {ticket_typ} für den Preis von {preis} kaufen? (ja/nein): ")
        if Zahlungsvorgang.lower() == Zahlungsvorgang.lower("ja"):
            Zahlung()
            break
        if Zahlungsvorgang.lower() == "nein":
            break
        print("Alles klar, vielleicht beim nächsten mal")

und er zeigt mir folgende Fehlermeldung an:

if Zahlungsvorgang.lower() == Zahlungsvorgang.lower("ja"):

                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^

TypeError: str.lower() takes no arguments (1 given)

Was genau meint er jetzt, der string hat doch ein argument gegeben, oder nicht.
Denn Rechts hatte es nur mit "Ja" nicht funktioniert

0
jo135  09.01.2024, 10:01
@iAmProgrammer
Zahlungsvorgang.lower("ja")

Was glaubst du, damit zu erreichen?

Du willst zwei Strings vergleichen. Einer ist in einer Variable, einen hast du bereits als Literal ("ja"). Somit ganz einfach

if Zahlungsvorgang.lower() == "ja":

Beim "nein" hast du es ja schon richtig...

0
iAmProgrammer 
Fragesteller
 09.01.2024, 10:03
@jo135

ooh, haha ok. manchmal bin ich ein bisschen durcheinander. ich bin jetzt auch kein top programmiere wie man merkt. ich probier es mal, danke. Komisch das ich da nicht drauf gekommen bin...
UPDATE: funktioniert trotzdem nicht.

0
iAmProgrammer 
Fragesteller
 11.01.2024, 08:59
@iAmProgrammer

Also ich habe es jetzt hinbekommen, nur zeigt er nach dem Kauf keine Kaufbestätigung sondern nur die Bezahlmethode an, haha. Da muss ich noch schauen, sonst läuft der Rest

0