Frage zum einem Quiz Programm

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

Hallo Leute:
ich habe hier ein kleines Problem und wollte euch um Rat bitten.
Meine frage lautet wie folgt:
Ich habe in meiner Funktion MAIN() 2 Variabeln mit dem namen richtige_antworten und falsche_antworten.
Diese möchte ich am ende der 10 Fragen ausgegeben haben :

print(" Das waren %d richtige und %d falsche Antworten." % (richtige_antworten, falsche_antworten))
print(" Von 25 Fragen haben sie %d richtig und %d falsch beantwortet!" % (richtige_antworten, falsche_antworten))

Mein Problem ist, das die 2 Variabeln nicht definiert sind weil sie ja nur in der Funktion enthalten sind. Jetzt ist die Frage, wie bekomme
ich diese 2 Variabeln aus der Funktion Main(), um sie am ende ausgeben zu können? Vielen dank im vorraus !

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():
    fragen = read_questions(QUESTION_FILENAME)
    random.shuffle(fragen)
    richtige_antworten = falsche_antworten = 0
    for nr, (frage, antwort) in enumerate(fragen[:NUM_QUESTIONS]):
        nr += 1
        print("FrageNR.%d von %d" % (nr, NUM_QUESTIONS))
        print("~~~~~~~~~~~")
        guess = input(frage)
        datei=open("FalscheAntworten.txt","a") 
        print(nr,"___FRAGE:",frage,"___","___RICHTIGE ANTWORT:",antwort,"___","___IHRE ANTWORT:",guess,"___","___ERGEBNIS:",antwort == guess, file=datei)
        if guess.lower() == antwort:
            richtige_antworten += 1
            print("Richtig!")
        else:
            falsche_antworten += 1
            print("Falsch, die korrekte Antwort lautet %s!" % antwort)
        print("|  Richtig: %d  |  Falsch: %d" % (richtige_antworten, falsche_antworten))
        print("-----------------------------------------------------------")
        datei.close()
        

if __name__ == '__main__':
    main()
    

print(" Das waren %d richtige und %d falsche Antworten." % (richtige_antworten, falsche_antworten))  
print(" Von 25 Fragen haben sie %d richtig und %d falsch beantwortet!" % (richtige_antworten, falsche_antworten))
print("--------------------------------------------------------------")




while True:
    answer = input("Run again? (y/n): ")
    if answer not in ('y', 'n'):
        print("Invalid input.")
        break
    if answer == 'y':
        print("--------------------------------------------------------------")
        print("Allgemine Infomationen:")
        print(" Von 25 Fragen haben sie %d richtig und %d falsch beantwortet!" % (richtige_antworten, falsche_antworten))
        print("--------------------------------------------------------------")
        main()
    else:
        print("Goodbye")
        break
nezzcarth
User
Beiträge: 1631
Registriert: Samstag 16. April 2011, 12:47

Matsiw hat geschrieben:
Mein Problem ist, das die 2 Variabeln nicht definiert sind weil sie ja nur in der Funktion enthalten sind. Jetzt ist die Frage, wie bekomme
ich diese 2 Variabeln aus der Funktion Main(), um sie am ende ausgeben zu können? Vielen dank im vorraus !
Ein erster Schritt ist, dein Skript besser zu strukturieren. Zwar hast du eine main-Funktion, verwendest sie aber nicht so, wie sie eigentlich gedacht ist. Wenn man eine main-Funktion hat (und in aller Regel sollte man das), hat kein Code, der die Programmlogik abbildet etwas auf Modul-Ebene zu suchen. Das gehört dann alles in Funktionen und/oder Klassen. Teil deinen Code in kleine Funktionen auf und stell ihn so um, dass du diese von 'main' aus ansteuern kannst. Dann ergibt sich eigentlich recht schnell eine Struktur, bei der du in der main Funktion nur noch so c.a. den Code hast, der aktuell bei dir zum Schluss kommt und die restliche Funktionalität, die in sinnvolle Funktionen gekapselt ist, im Schleifen-Inneren aufruft.
Antworten