Hilfe bei meinem kleinen Quiz python

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
Matsiw
User
Beiträge: 2
Registriert: Donnerstag 25. Januar 2018, 02:37

Meine Frage lautet wie folgt:
ich wollte ein kleines Quiz zum üben programmieren und ich wollte es schaffen, in dieses Programm einmal "utf - 8" einzubauen
und das beim eintippen der Antworten die Schreibweise der Antwort egal ist. BSP F: Welche Farbe hat ein Apfel? A: Rot, rot, rOt!

Könnt ihr mir vielleicht dabei helfen? Ich habe schon einiges probiert aber es hat nie wirklich geklappt.

with open("FragenundAntworten.txt")as f:
FuA = f.readlines()

shuffle(FuA)
numRichtige = 0
numFalsche = 0
FrageNr = 0
numFragen = 10

for line in FuA[:numFragen]:
Frage, RichtigeAntwort = line.strip().split("\t")
Antwort = input(Frage + " ")
if Antwort == RichtigeAntwort:
FrageNr += 1
numRichtige += 1
print("Richtig!")
print("Frage Nr.%d | Richtig: %d | Falsch: %d" % (FrageNr, numRichtige, numFalsche))
print("-----------------------------------------------------------")

else:
FrageNr += 1
numFalsche += 1
print("Falsch, die korrekte Antwort lautet %s!" % RichtigeAntwort)
print("Frage Nr.%d | Richtig: %d | Falsch: %d" % (FrageNr, numRichtige, numFalsche))
print("-----------------------------------------------------------")
Benutzeravatar
noisefloor
User
Beiträge: 3829
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

... und willkommen im Forum :-)

Bitte den Code in einen Python-Codeblock setzen. So (ohne Einrückungen) ist da nicht lesbar.

Dein Verständnis von UTF-8 ist komplett falsch. UTF-8 ist eine Zeichenkodierung - das hat _nichts_ mit Groß-/Kleinschreibung zu tun.

Dein problem löst man üblicherweise so, dass man die Antwort komplett klein hinterlegt und die Nutzereingabe in Kleinbuchstaben umwandelt. Dazu kennen Python-Strings die Methode `lower()`.

Zum Code: Variablennamen schreibt man per Konvention klein_mit_unterstrich. Zum Formatieren von String nimmt man üblicherweise deren `format()`Methode, die ist mächtiger und flexibler als die ältere Methode, die du nützt.

Gruß, noisefloor
Sirius3
User
Beiträge: 17703
Registriert: Sonntag 21. Oktober 2012, 17:20

@Matsiw: bei Deinem Programm fehlen die Importe, das kann für die Beantwortung von Fragen wichtig sein. FuA ist ein schlechter Variablenname, weil Abkürzungen beim Lesen nur immer wieder Verwirrung auslösen, was denn das bedeuten mag. Das Einlesen einer Datei besteht immer auch aus dem Konvertieren in die richtige Datenstruktur. FuA ist eben nicht eine Liste von Strings, sondern eine Liste von Frage/Antwort-Paaren. Dinge, die sowohl im if als auch im else-Zweig stehen sollte man davor oder danach nur einmal schreiben. Wenn Du zu einer for-Schleife auch einen Index brauchst, nimm enumerate.

Schreibe Funktionen für abgeschlossene Aufgaben:

Code: Alles auswählen

import random

QUESTION_FILENAME = "FragenundAntworten.txt"
NUM_QUESTIONS = 10

def read_questions(filename):
    with open(filename) as lines:
        return [line.strip().split("\t") for line in lines]
    

def main():
    questions = read_questions(QUESTION_FILENAME)
    random.shuffle(questions)
    
    correct_answers = wrong_answers = 0
    for nr, (question, answer) in enumerate(questions[:NUM_QUESTIONS]):
        guess = input(question)
        if guess == answer:
            correct_answers += 1
            print("Richtig!")
        else:
            wrong_answers += 1
            print("Falsch, die korrekte Antwort lautet %s!" % answer)
        print("Frage Nr.%d  |  Richtig: %d  |  Falsch: %d" % (nr, correct_answers, wrong_answers))
        print("-----------------------------------------------------------")

if __name__ == '__main__':
    main()
Antworten