Pycharm gibt "Process finsihed with exit code 0" aus...

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
Benutzeravatar
Dennis89
User
Beiträge: 1562
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

wenn ich dich richtig verstanden habe, dann musst du deine Eingabe nicht als Ganzes prüfen, sondern Wort für Wort. Dann würde es sich auch anbieten etwas genauere Vorschriften zu machen, wie man die Wörter eintragen muss.

Code: Alles auswählen

WORDS = ['Name', 'Alter']


def main():
    entry = input().split(',')
    for word in entry:
        if word in WORDS:
            print(f'Wort "{word}" gefunden')


if __name__ == '__main__':
    main()
Dass das Beispiel funktioniert musst du die Eingabe mit Komma und ohne Leerzeichen trennen.

Den Code kannst du direkt hier ins Forum posten, einfach im Vollständigen Editor die Code-Tags nutzen. Dann sieht das so wie in meinem Beispiel aus.
Lass dir mal deine Eingaben mit print ausgeben und dann siehst du dass die Eingabe so, nicht in deiner Datenstruktur ist, sondern nur ein Teil davon und das musst du dann abfragen bzw. auftrennen und dann abfragen.
Vielleicht testest du dich mal in einem kleinen Beispielprogramm heran, denn dein Code bietet viel Verbesserungspotential, dazu schreibt bestimmt der ein oder andere noch was.

Grüße
Dennis

Zum Schluss noch der originale Code, damit man nicht auf den Link klicken muss:

Code: Alles auswählen

#Aufgabe 1

print("")
Name = input("Gib deinen Namen ein: ")
print("")
Alter = input("Gib dein Alter ein: ")
print("")
Klasse = input("Gib deine Klasse ein: ")
print("")
Erneut = input("Sind die Angaben korrekt? [y/n] ")
if Erneut in {'N','n'}:
    Angabe = input("Welche Angabe willst du ändern? [Name/Alter/Klasse] ""(Falls du mehrere Angabe ändern willst, gib sie einfach hintereinander ein): ")
    if Angabe in {'Name','name'}:
        print("")
        Name2 = input("Gib deinen Namen erneut ein: ")
    if Angabe in {'Alter','alter'}:
        print("")
        Alter2 = input("Gib dein Alter erneut ein: ")
    if Angabe in {'Klasse','klasse'}:
        print("")
        Klasse2 = input("Gib deine Klasse erneut ein: ")
    import time
    time.sleep(2.5)
    if Angabe in {'Name','name'} and Angabe in {'Alter','Alter'} and Angabe in {'Klasse','klasse'}:
        print("Schülerprofil:", Name2 + ",", Alter2 + ",", Klasse2)
        print("Name:", Name2)
        print("Alter:", Alter2)
        print("Klasse", Klasse2)
    elif Angabe in {'Name','name'} and Angabe in {'Alter','Alter'}:
        print("Schülerprofil:", Name2 + ",", Alter2 + ",", Klasse)
        print("Name:", Name2)
        print("Alter:", Alter2)
        print("Klasse", Klasse)
    elif Angabe in {'Name','name'} and Angabe in {'Klasse','klasse'}:
        print("Schülerprofil:", Name2 + ",", Alter + ",", Klasse2)
        print("Name:", Name2)
        print("Alter:", Alter)
        print("Klasse", Klasse2)
    elif Angabe in {'Alter','Alter'} and Angabe in {'Klasse','klasse'}:
        print("Schülerprofil:", Name + ",", Alter2 + ",", Klasse2)
        print("Name:", Name)
        print("Alter:", Alter2)
        print("Klasse", Klasse2)
    elif Angabe in {'Name','name'}:
        print("Schülerprofil:", Name2 + ",", Alter + ",", Klasse)
        print("Name:", Name2)
        print("Alter:", Alter)
        print("Klasse", Klasse)
    elif Angabe in {'Alter','alter'}:
        print("Schülerprofil:", Name + ",", Alter2 + ",", Klasse)
        print("Name:", Name)
        print("Alter:", Alter2)
        print("Klasse", Klasse)
    elif Angabe in {'Klasse','klasse'}:
        print("Schülerprofil:", Name + ",", Alter + ",", Klasse2)
        print("Name:", Name)
        print("Alter:", Alter)
        print("Klasse", Klasse2)
elif Erneut in {'Y','y'}:
    print("Schülerprofil:",Name+",",Alter+",", Klasse)
    print("Name:", Name)
    print("Alter:", Alter)
    print("Klasse", Klasse)
else:
    print("")
    print("ERROR 404")
"When I got the music, I got a place to go" [Rancid, 1993]
Benutzeravatar
__blackjack__
User
Beiträge: 14077
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Impulse_VLR: Wie müsste denn `Angabe` Deiner Meinung nach aussehen, also welchen Wert müsste das haben, damit eine Bedingung wie ``Angabe in {'Name','name'} and Angabe in {'Alter','Alter'} and Angabe in {'Klasse','klasse'}`` jemals wahr ist? Welcher Wert ist denn in allen drei Mengen enthalten?

Der Code ist viel zu lang und enthält viel zu viel Code und Datenwiederholungen. Das macht man nicht — das ist geradezu das Gegenteil von dem was man als Programmierer erreichen will.

Die Schnittstelle zum Benutzer ist hier auch unnötig umständlich. Man würde eher eine Schleife schreiben in der der Benutzer solange den Datensatz eingeben kann, bis er am Ende zufrieden ist. Und statt zu fragen welche Angaben geändert werden sollen, könnte man einfach alle noch mal Abfragen und die Eingabe nur übernehmen, wenn es keine Leereingabe war. Im Falle einer Leereingabe wird einfach der alte Wert behalten.

Diese zweielementigen Mengen sind auch viel unnötige Tipparbeit. Die hätte man sich sparen können in dem man die Eingabe einfach in Kleinbuchstaben wandelt und dann nur mit der kleingeschriebenen Variante vergleichen muss.

Der Benutzer wird auf Deutsch angesprochen, soll dann aber "y" oder "n" auf eine *J*a/Nein-Frage eingeben?

Allgemeine Anmerkungen zum Quelltext:

Importe gehören an den Anfang des Moduls, nicht mittem im Code versteckt. Man sollte die Abhängigkeiten eines Moduls leicht am Anfang erkennen können.

Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (PascalCase).

Man nummeriert keine Namen. Dann will man sich entweder bessere Namen überlegen, oder gar keine Einzelnamen/-werte, sondern eine Datenstruktur. Oft eine Liste. Hier machen die Nummern aber auch gar keinen Sinn. Es geht ja darum die bereits getätigte Eingabe noch einmal zu korrigieren — also warum dann einen neuen Namen statt den falschen Wert durch die neue Eingabe zu ersetzen? Gerade diese Nummerierung zieht diesen ganzen unnötigen Code nach sich.

Eine leere Zeichenkette an `print()` zu übergeben ist relativ sinnlos. Ohne Argumente macht `print()` das gleiche.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Benutzeravatar
__blackjack__
User
Beiträge: 14077
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Ein Beispiel wie das aussehen könnte:

Code: Alles auswählen

#!/usr/bin/env python3


def input_with_default(prompt, default):
    if default:
        prompt = f"{prompt} ({default})"
    result = input(f"{prompt}: ").strip()
    return result or default


def erfasse_daten():
    name = alter = klasse = ""
    while True:
        name = input_with_default("\nGib deinen Namen ein", name)
        alter = input_with_default("\nGib dein Alter ein", alter)
        klasse = input_with_default("\nGib deine Klasse ein", klasse)
        if name and alter and klasse:
            while True:
                korrekt = (
                    input("\nSind die Angaben korrekt? [j/n] ").strip().lower()
                )
                if korrekt == "j":
                    return name, alter, klasse

                if korrekt == "n":
                    break

                print("Bitte mit j oder n antworten!")
        else:
            print("\nDie Daten sind unvollständig!")

        print(
            "\nBei Leereingaben bleibt der in Klammern angegebene alte Wert"
            " erhalten!"
        )


def main():
    name, alter, klasse = erfasse_daten()
    print(f"Schülerprofil: {name}, {alter}, {klasse}")
    print(f"Name: {name}")
    print(f"Alter: {alter}")
    print(f"Klasse: {klasse}")


if __name__ == "__main__":
    main()
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten