Ich habe mir für die Schule einen kleinen Französisch-Verbentrainer mit Python geschrieben.
Die Verben werden im XML Format gespeichert.
Falls ein paar Python Profis Verbesserungsvorschläge oder Verschönerungen haben immer her damit!
Code: Alles auswählen
import random
import pickle
import xml.dom.minidom
from xml.dom.minidom import parse
from colorama import init
from colorama import Fore, Back, Style
init()
random.seed()
rightAnswers = 0
wrongAnswers = 0
totalAnswers = 0
randomPersonDict = {0:"je", 1:"tu", 2:"il", 3:"nous", 4:"vous", 5:"ils"}
randomTenseDict = {0:"présent", 1:"imparfait", 2:"futur"}
statisticsPath = "statisticsVerbs.bin"
def saveStatistics(filename):
global rightAnswers
global wrongAnswers
global totalAnswers
save = pickle.Pickler(open(filename, "wb"),2)
save.dump(rightAnswers)
save.dump(wrongAnswers)
save.dump(totalAnswers)
def loadStatistics(filename):
global rightAnswers
global wrongAnswers
global totalAnswers
save = pickle.Unpickler(open(filename, "rb"))
rightAnswers = save.load()
wrongAnswers = save.load()
totalAnswers = save.load()
def getVerbs(filename):
DOMTree = xml.dom.minidom.parse(filename)
verbList = DOMTree.documentElement
verbs = verbList.getElementsByTagName("verb")
return verbs
def getRandomData(verbs):
randomVerb = random.randint(0, len(verbs)-1)
randomPerson = randomPersonDict[random.randint(0,5)]
randomTense = randomTenseDict[random.randint(0,2)]
return (randomVerb,randomPerson,randomTense)
def getAnswer(randomVerb,randomTense,randomPerson):
rightAnswer = verbs[randomVerb].getElementsByTagName(randomTense)[0]
rightAnswer = rightAnswer.getElementsByTagName(randomPerson)
rightAnswer = rightAnswer[0].firstChild.nodeValue
return rightAnswer
def checkAndPrintAnswer(inputAnswer,rightAnswer):
global rightAnswers
global wrongAnswers
global totalAnswers
if inputAnswer.strip() == rightAnswer:
rightAnswers += 1
totalAnswers += 1
print(Fore.GREEN+"Richtig!")
print()
else:
wrongAnswers += 1
totalAnswers += 1
print(Fore.CYAN+"Falsch.")
print(Fore.CYAN+"Richtige Antwort wäre:")
print(rightAnswer)
print()
def printVerbData(randomVerb,randomTense,randomPerson):
print(Fore.RED+"Verb:", verbs[randomVerb].getAttribute("deutsch"))
print(Fore.RED+"Zeit:", randomTense)
print(Fore.RED+"Person:", randomPerson)
def printStatistics():
global rightAnswers
global wrongAnswers
global totalAnswers
print()
print()
print(Fore.RED+"-------------------------Statistics-------------------------")
print(Fore.RED+" Richtige Antworten:", rightAnswers)
print(Fore.RED+" Falsche Antworten:", wrongAnswers)
print(Fore.RED+" Totale Anzahl Antworten:", totalAnswers)
print(Fore.RED+" "+str((100*rightAnswers)/totalAnswers) + "% Richtige Antworten.")
try:
loadStatistics(statisticsPath)
except IOError:
pass
for i in range(25):
verbs = getVerbs("verbes.xml")
randomVerb,randomPerson,randomTense = getRandomData(verbs)
printVerbData(randomVerb,randomPerson,randomTense)
rightAnswer = getAnswer(randomVerb,randomTense,randomPerson)
inputAnswer = input()
checkAndPrintAnswer(inputAnswer,rightAnswer)
printStatistics()
saveStatistics(statisticsPath)