cela fait un certain temps que je songeais a créer un programme qui permette de réviser son vocabulaire de manière pédagogique, c'est fait. avec vocabulary vous pouvez vous entrainer sur des evenements/dates, vocabulaire a traduire,... et même créer vos questions/reponses.
Un programme en apparence simple mais en réalité assez compliqué puisque il vous ré-interrogera plus souvent sur les questions que vous ne savez pas, avec vocabulary vous apprenez votre vocabulaire à partir de 0 !
inclus dans le zip:
vocabulary.py
dicocreator.py
+des listes
note : le dicocreator est enfin fini.
Source / Exemple :
import os,random,sys
splash = "--------------------------------------------------------------------------------\n Programme pour apprendre du voc, des dates,...\n--------------------------------------------------------------------------------\n"
sys.stdout.write(splash) # splash de lancement
pasdico = "ce fichier n'est pas un dictionnaire de question reponses\n"
# listes reduite pour les questions
liste1 = []
liste2 = []
# liste des Q/R deja vu dans la liste reduite (liste1 et liste2)
dejavu = []
# on efface l'ecran puis on remet le splash
def newscreen():
try:
os.system('cls')
sys.stdout.write(splash)
except:
os.system('clear')
sys.stdout.write(splash)
while True:
# listes de toutes les questions reponses
indices = [] # les questions
reponses = [] # les reponses exigees
# ouverture du fichier
while True:
sys.stdout.write("\nveuillez entrez le nom du fichier a ouvrir : ")
adresse = raw_input()
if os.path.isfile(adresse) == True:
Liste=file(adresse,"r")
listebrut=Liste.readlines() # la liste des Q/R avec les \n, les 1 et 2.
Liste.close()
newscreen()
break # on a reussis a ouvrir le fichier donc on peut continuer
else:
sys.stdout.write("impossible d'ouvrir le fichier indique"+"\n")
try:
# decoupage de la liste ouverte
sys.stdout.write("\n")
for mot in listebrut:
# si le mot se finit par un retour a la ligne
if mot[-1] == "\n":
if mot[0] == "1":
indices.append(mot[1:len(mot)-1])
elif mot[0] == "2":
reponses.append(mot[1:len(mot)-1])
elif mot[0] == "#":
sys.stdout.write(mot[1:len(mot)-1]+"\n")
# sinon si il est complet
else:
if mot[0] == "1":
indices.append(mot[1:])
elif mot[0] == "2":
reponses.append(mot[1:])
elif mot[0] == "#":
sys.stdout.write(mot[len(mot)-1]+"\n")
if len(indices) != len(reponses):
sys.stdout.write(pasdico)
continue
else:
break
except:
sys.stdout.write(pasdico)
# variables pour savoir si l'utilisateur connait la liste reduite
nbok = 0
ok = True
last = "" # pour ne pas repeter deux fois de suiteles memes questions
# boucle principale
while True:
# ajout aleatoire de questions-reponses dans la liste reduite #########################################################################
if ok == True:
while True: # len(liste1) < len(indices)
questionreponse = random.randrange(len(indices)) # generation aleatoire
if (indices[questionreponse] not in liste1 and indices[questionreponse] not in dejavu) or (len(indices) >= len(dejavu)):
liste1.append(indices[questionreponse])
liste2.append(reponses[questionreponse])
nbok = 0
ok = False
if indices[questionreponse] not in dejavu:
dejavu.append(indices[questionreponse])
break # une question aleatoire nouvelle a ete trouvee
#a#################################################################################################
# generation aleatoire d'une question pour l'utilisateur
while True:
randomquestion = random.randrange(len(liste1)) # on prend une question au hasard dans la liste reduite
if (len(liste1) <= liste1.count(liste1[0])) or (liste1[randomquestion] != last): # si il n'y a qu'un seul type de question ou qu'une bonne question a ete trouvee
break
last = liste1[randomquestion]
sys.stdout.write("\nQuestion : " + liste1[randomquestion] + " : ")
saisie = raw_input()
# on evalue si la reponse de l'utilisateur est juste ou pas
if liste2[randomquestion] in saisie: # si c'est la bonne reponse
sys.stdout.write("bravo vous avez trouve la bonne reponse"+"\n")
nbok += 1
liste1.remove(liste1[randomquestion]) # on supprime une valeur car il sait la question
liste2.remove(liste2[randomquestion])
else: # si ce n'est pas la bonne reponse
if len(liste1) > 1:
liste1.append(liste1[randomquestion])
liste2.append(liste2[randomquestion])
sys.stdout.write("perdu, la bonne reponse etait : "+liste2[randomquestion]+"\n")
raw_input() # on s'assure qu'il a bien compris
# on nettoie l'ecran pour effacer les reponses
newscreen()
# savoir si on ajoute une question ou pas
if (nbok > len(liste1)) or (len(liste1) <= liste1.count(liste1[0])):
ok = True
else:
ok = False
Conclusion :
bonnes révisions, partagez vos listes et mettez des commentaires !
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.