Seite 1 von 1

Anfänge des Programmierens

Verfasst: Sonntag 25. August 2019, 10:55
von DomenikR.
Hallo ich bin neu hier und möchte euch meinen ersten code vorstellen den ich noch ziemlich lang finde.
Ich wollte ein Quiz machen zum lernen für meine Ausbildung aber ich finde ihn ein bisschen lang.
Wäre nett wenn mir jemand sagen könnte wie ich das ein bisschen abspecken könnte oder besser machen könnte.
MFG
Domenik

Code: Alles auswählen

richtig = "Das war die richtige Antwort."
falsch = "Das war leider die falsche Antwort."
punkteinfo = "Dein Punktestand ist:"


print("Das ist ein Fragebogen für die Elektrotechnik \n")

# Frage 1
print("Welche Einheit ist für Spannung? \n")
spannungV = input("1: A \n2: V \n3: Ω \n4: U \n")

if spannungV == "2" or "v" or "V":
    print(richtig)
    punktestand = 1
    print(punkteinfo, punktestand)
else:
    print(falsch, " Die Einheit von Spannung ist Volt (V)")
    punktestand = 0

#Fage 2
print("2. Frage: Was ist das Forlmezeichen für Spannung? \n")
spannungU = input("1: P \n2: I \n3: R \n4: U  \n")

if spannungU == "4" or "u" or "U":
    print(richtig)
    punktestand1 = 1
    print(punkteinfo, punktestand + punktestand1)
else:
    print(falsch, "Das Formelzeichen für Spannung ist U")
    punktestand1 = 0
    print(punkteinfo, punktestand + punktestand1)

A = (punktestand + punktestand1)

# Frage 3
print("3. Frage: Welche Einheit ist für Strom? \n")
stromA = input("1: U  \n2: P  \n3: A  \n4: I \n")

if stromA == "3" or "a" or "A":
    print(richtig)
    punktestand2 = 1
    print(punkteinfo, A + punktestand2)
else:
    print(falsch, "Die Einheit von Strom ist Ampere (A)")
    punktestand2 = 0
    print(punkteinfo, A + punktestand2)
    
#Frage 4

print("4. Frage: Was ist das Formelzeichnen für Strom? \n")
stromI = input("1: I  \n2: P  \n3: Ω  \n4: U \n")

if stromI == "1" or "i" or "I":
    print(richtig)
    punktestand3 = 1
    print(punkteinfo, A + punktestand2 + punktestand3)
else:
    print(falsch, "Das Formelzeichen für Strom ist I ")
    punktestand3 = 0
    print(punkteinfo, A + punktestand2 + punktestand3)

B = (punktestand2 + punktestand3)
AB = (A + B)

#Frage 5
print("5. Frage: Was ist die Einheit für Leistung? \n")
leistungW = input("1: I  \n2: A  \n3: W  \n4: P  \n")

if leistungW == "3" or "w" or "W":
    print(richtig)
    punktestand4 = 1
    print(punkteinfo, AB + punktestand4)
else:
    print(falsch, "Die Einheit für Leistung ist Watt (W)")
    punktestand4 = 0
    print(punkteinfo, AB + punktestand4)

# Frage 5
print("5. Frage: Was ist das Formelzeichen für Leistung? \n ")
leistungP = input("1: U  \n2: P  \n3: I  \n 4: Ω")

if leistungP == "2" or "p" or "P":
    print(richtig)
    punktestand5 = 1
    print(punkteinfo, AB + punktestand4 + punktestand5)
else:
    print(falsch, "Das Formelzeichen von Leistung ist P ")

C = (punktestand4 + punktestand5)
ABC = (AB + C)

if ABC == "6":
    print("Herzlichen Glückwunsch du hast alle Fragen richtig beantwortet.")
else:
    print("Tja da musst du wohl noch ein bisschen lernen ;)")

input()

Re: Anfänge des Programmierens

Verfasst: Sonntag 25. August 2019, 11:22
von Sirius3
@DomenikR.: in erster Linie sollte ein Programm funktionieren. ›or‹ ist kein umgangssprachliches Oder sondern eine logische Operation; statt dessen ist hier der ›in‹-Operator richtig.
Python ist stark typisiert, man kann keine Zahl mit einem String vergleichen, das wird niemals das selbe sein.

Variablennamen sind wichtig. Du hast für die selben Inhalt verschiedene Namen benutzt, einmal punktestand, punktestand1, punktestand2, ... und gleichzeitig A, B, C, AB, ABC. Dabei hast Du auch übersehen, dass punktestand5 in einem Zweig niemals definiert wird.
Eigentlich brauchst Du maximal zwei Variablen dafür; einmal die Punktzahl für eine Frage und die Gesamtpunktzahl.

Wenn man 6 mal quasi den selben Code hat, ist das ein Zeichen dafür, eine Funktion zu definieren, die man jeweils mit den passenden Parametern aufrufen kann.

Re: Anfänge des Programmierens

Verfasst: Sonntag 25. August 2019, 11:44
von DomenikR.
Hallo siruis3
Danke für die schnelle Antwort
Bei den punkteständen habe ich das so oft gemacht weil ich nicht wusste wie ich das sonst zusammen rechnen soll
Was wäre denn deine Vorgehensweise mit den punkteständen

Also in dem Fall lieber "in" anstatt "or" nehmen?

Mfg
Domenik

Re: Anfänge des Programmierens

Verfasst: Sonntag 25. August 2019, 11:55
von Sirius3
Du zählst einfach die Gesamtpunktzahl:

Code: Alles auswählen

richtig = "Das war die richtige Antwort."
falsch = "Das war leider die falsche Antwort."
punkteinfo = "Dein Punktestand ist:"

gesamtpunktzahl = 0
print("Das ist ein Fragebogen für die Elektrotechnik \n")

# Frage 1
print("Welche Einheit ist für Spannung? \n")
antwort = input("1: A \n2: V \n3: Ω \n4: U \n")

if antwort in ("2", "v", "V"):
    print(richtig)
    punkte = 1
else:
    print(falsch, " Die Einheit von Spannung ist Volt (V)")
    punkte = 0
gesamtpunktzahl += punkte
print(punkteinfo, gesamtpunktzahl)

#Fage 2
print("2. Frage: Was ist das Forlmezeichen für Spannung? \n")
antwort = input("1: P \n2: I \n3: R \n4: U  \n")

if antwort in ("4", "u", "U"):
    print(richtig)
    punkte = 1
else:
    print(falsch, "Das Formelzeichen für Spannung ist U")
    punkte = 0
gesamtpunktzahl += 1
print(punkteinfo, gesamtpunktzahl)
Achja, die Groß-/Kleinschreibung ist bei Einheiten relevant.

Re: Anfänge des Programmierens

Verfasst: Sonntag 25. August 2019, 11:57
von DomenikR.
Ah okay jetz hab ich das verstanden
Danke schön 🤘

Re: Anfänge des Programmierens

Verfasst: Sonntag 25. August 2019, 12:21
von DomenikR.
So habe das nun alles angewendet.

Code: Alles auswählen

while True:
    richtig = "Das war die richtige Antwort."
    falsch = "Das war leider die falsche Antwort."
    punkteinfo = "Dein Punktestand ist:"
    
    
    print("Das ist ein Fragebogen für die Elektrotechnik \n")
    
    # Frage 1
    print("Welche Einheit ist für Spannung? \n")
    antwort = input("1: A \n2: V \n3: Ω \n4: U \n")
    
    if antwort in ("2", "v", "V"):
        print(richtig)
        punkte = 1
        gesamtpunktzahl = punkte
        print(punkteinfo, gesamtpunktzahl)
    else:
        print(falsch, " Die Einheit von Spannung ist Volt (V)")
        punkte = 0
        gesamtpunktzahl += punkte
    
    #Fage 2
    print("2. Frage: Was ist das Forlmezeichen für Spannung? \n")
    antwort = input("1: P \n2: I \n3: R \n4: U  \n")
    
    if antwort in ("4", "u", "U"):
        print(richtig)
        punkte = 1
        gesamtpunktzahl += punkte
        print(punkteinfo, gesamtpunktzahl)
    else:
        print(falsch, "Das Formelzeichen für Spannung ist U")
        punkte = 0
        gesamtpunktzahl += punkte
        print(punkteinfo, gesamtpunktzahl)
    
    
    
    # Frage 3
    print("3. Frage: Welche Einheit ist für Strom? \n")
    antwort = input("1: U  \n2: P  \n3: A  \n4: I \n")
    
    if antwort in ("3", "a", "A"):
        print(richtig)
        punkte = 1
        gesamtpunktzahl += punkte
        print(punkteinfo, gesamtpunktzahl)
    else:
        print(falsch, "Die Einheit von Strom ist Ampere (A)")
        punkte = 0
        gesamtpunktzahl += punkte 
        print(punkteinfo, gesamtpunktzahl)
        
    #Frage 4
    
    print("4. Frage: Was ist das Formelzeichnen für Strom? \n")
    antwort = input("1: I  \n2: P  \n3: Ω  \n4: U \n")
    
    if antwort in ("1", "i", "I"):
        print(richtig)
        punkte = 1
        gesamtpunktzahl += punkte
        print(punkteinfo, gesamtpunktzahl)
    else:
        print(falsch, "Das Formelzeichen für Strom ist I ")
        punkte = 0
        gesamtpunktzahl += punkte
        print(punkteinfo, gesamtpunktzahl)
    
    #Frage 5
    print("5. Frage: Was ist die Einheit für Leistung? \n")
    antwort = input("1: I  \n2: A  \n3: W  \n4: P  \n")
    
    if antwort in ("3", "w", "W"):
        print(richtig)
        punkte = 1
        gesamtpunktzahl += punkte
        print(punkteinfo, gesamtpunktzahl)
    else:
        print(falsch, "Die Einheit für Leistung ist Watt (W)")
        punkte = 0
        gesamtpunktzahl += punkte
        print(punkteinfo, gesamtpunktzahl)
    
    # Frage 5
    print("5. Frage: Was ist das Formelzeichen für Leistung? \n ")
    antwort = input("1: U  \n2: P  \n3: I  \n 4: Ω")
    
    if antwort in ("2", "p", "P"):
        print(richtig)
        punkte = 1
        gesamtpunktzahl += punkte
        print(punkteinfo, gesamtpunktzahl)
    else:
        print(falsch, "Das Formelzeichen von Leistung ist P ")
        punkte = 0
        gesamtpunktzahl += punkte
        print(punkteinfo, gesamtpunktzahl)
    
    if gesamtpunktzahl == "6":
        print("Herzlichen Glückwunsch du hast alle Fragen richtig beantwortet.")
    else:
        print("Tja da musst du wohl noch ein bisschen lernen ;)")
    
    print("Möchtest du nochmal Üben? J/N")
    a = input()
    if a.upper() == "J":
        break
    

Re: Anfänge des Programmierens

Verfasst: Sonntag 25. August 2019, 12:29
von Sirius3
Wenn die letzten Zeilen im else-Zweig exakt gleich sind, wie im if-Zweig, dann kann man sie einfach auch danach einmal schreiben. Dass man Zahlen nicht mit Strings vergleichen sollte, gilt immer noch. Fang an, eine Funktion zu schreiben und als nächsten Schritt alle Fragen und Antworten in eine Datenstruktur zu packen.

Re: Anfänge des Programmierens

Verfasst: Sonntag 25. August 2019, 12:40
von DomenikR.
Okay und wie mache ich diese datenstruktur
bin noch nicht so gut dadrin
kenne mich nur mit paar basics aus

Re: Anfänge des Programmierens

Verfasst: Sonntag 25. August 2019, 12:44
von __blackjack__
@DomenikR.: Schreib am besten erst einmal eine Funktion die genau eine Frage stellt, dann siehst Du ja was Du dieser Funktion an Argumenten übergeben musst für jede der 6 Fragen. Wenn Du dann im Hauptprogramm statt 6 mal fast gleichen Code nur noch die sechs Aufrufe der einen Funktion hast, dann siehst Du leichter welche Daten pro Frage benötigt werden.

Im nächsten Schritt kannst Du diese Daten dann in eine Datenstruktur stecken und darüber dann mit einer Schleife laufen in der dann nur noch *einmal* der Funktionsaufruf für die Abarbeitung einer Frage steht.

Edit: Ach so: *Allererster* Schritt: Das bisherige in eine Funktion stecken die `main()` heisst.

Re: Anfänge des Programmierens

Verfasst: Sonntag 10. November 2019, 12:06
von Sarapheus
Hey, habe auch vor kurzem wieder mit Python angefangen und habe mir dein Programm mal als Übung genommen.
Ich habe es ein wenig abgeändert, so das man es leichter mit Fragen erweitern kann und habe es auch geschafft es auf knapp 30 Zeilen Code runter zu brechen.
Hier mal mein Lösungsvorschlag, Kritik ist gerne erwünscht:

Code: Alles auswählen

punktestand = 0
fragen = ("1. Welche Einheit ist für Spannung?\n\n1: A\n2: V\n3: Ω\n4: U",
          "2. Was ist das Formelzeichen für Spannung ?\n\n1: P\n2: I\n3: R\n4: U",
          "3. Welche Einheit ist für Strom ?\n\n1: U\n2: P\n3: A\n4: I\n",
          "4. Was ist das Formelzeichen für Strom ?\n\n1: I\n2: P\n3: Ω\n4: U",
          "5. Was ist die Einheit für Leistung ?\n\n1: I\n2: A\n3: W\n4: P",
          "6. Was ist das Formelzeichen für Leistung ?\n\n1: U\n2: P\n3: I\n4: Ω")
antworten = (2 , 4 , 3 , 1, 3, 2)
print ("Antworte mit den Zahlen.")

for frage in fragen:
    print (frage)
    while True:
        try:
            antwort = int(input())
            break
        except ValueError:
            print("Falsche Eingabe, es wurde keine Zahl eingegeben.\nAntwort erneut eingeben.\n")
    if antwort == antworten[fragen.index(frage)]:
        punktestand +=1
        print ("Richtige Antwort")
        print ("Punktestand: " + str(punktestand))
    else:
        print ("Falsche antwort")

print ("Ende\n Du solltest immer weiter Lernen!")

Re: Anfänge des Programmierens

Verfasst: Sonntag 10. November 2019, 17:15
von Sirius3
›fragen‹ sollte eine Liste sein, kein Tuple, weil in einem Tuple jedes Element eine bestimmte Bedeutung hat und nicht aus gleichartigen Elementen besteht.
Es ist schlecht, dass ›fragen‹ von den ›antworten‹ getrennt sind; nicht nur, weil Du später den Index der Frage mit `index` ermitteln mußt. Es ist einfach nur sehr schwierig, auf anhieb die Antwort auf die vierte Frage zu finden. Üblich ist es, Frage und Antwort in ein Tuple zu packen und diese Paar dann in eine Liste. Zwischen Funktionsname und öffnende Klammer kommt kein Leerzeichen.
Statt + und str benutzt man Stringformatierung.

Re: Anfänge des Programmierens

Verfasst: Sonntag 10. November 2019, 17:42
von __blackjack__
Eine weitere Möglichkeit die Fragen und dazugehörigen Antworten zusammen zu fassen wäre auch eine Frage und eine Liste mit Antworten jeweils in einem Tupel zusammen zu fassen. Die erste Antwort ist dabei immer die richtige. Und wenn man die dem Benutzer präsentiert, zeigt man sie ihm in randomisierter Reihenfolge.