Vocabulary, réviser son vocabulaire pédagogiquement

Description

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 !

Codes Sources

A voir également

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.