diff options
Diffstat (limited to 'gere_grille.py')
-rw-r--r-- | gere_grille.py | 67 |
1 files changed, 51 insertions, 16 deletions
diff --git a/gere_grille.py b/gere_grille.py index 9a472ed..6898f52 100644 --- a/gere_grille.py +++ b/gere_grille.py | |||
@@ -5,31 +5,49 @@ Created on Mon Jul 26 22:58:28 2021 | |||
5 | 5 | ||
6 | @author: sekhmet | 6 | @author: sekhmet |
7 | """ | 7 | """ |
8 | import random | 8 | import random, zlib, base64, json |
9 | import zlib, base64, json | ||
10 | import gere_erreurs as e | 9 | import gere_erreurs as e |
11 | from config import DEFAUT, CONFIG | 10 | from config import DEFAUT, CONFIG |
12 | 11 | ||
13 | def genere_grille(config, textes): | 12 | def genere_grille(config, textes): |
14 | """ génère une grille avec des éléments aléatoires du tableau textes. Si y'a pas assez, on complète aléatoirement avec des 0. | 13 | """ génère une grille avec des éléments aléatoires du tableau textes. |
15 | config contient tout ce qu'on veut pour la grille""" | 14 | textes est un tableau de tableau : la phrase, puis les réponses |
15 | Dans la grille on mettra une liste avec la question et les réponses | ||
16 | Si y'a pas assez, on met la liste vide [] | ||
17 | |||
18 | config contient tout ce qu'on veut pour la grille, | ||
19 | ici on utilisera les dimensions et les phrases_additionnelles | ||
20 | on enlève aussi les réponses si config['reponses_presentes'] n'est pas là""" | ||
16 | 21 | ||
17 | nblignes, nbcol = config["nblignes"], config["nbcolonnes"] | 22 | nblignes, nbcol = config["nblignes"], config["nbcolonnes"] |
18 | 23 | ||
19 | # Créer la grille | ||
20 | grille = [ [""]*nbcol for i in range(nblignes)] | ||
21 | 24 | ||
22 | nbdata = nbcol*nblignes - config["nbcasesvides"] # Nombre d'entrées | 25 | soustab = config.get("phrases_add",[]).copy() # On met les phrases custom en premier |
26 | soustab = soustab + [ [] ]*config["nbcasesvides"] # On ajoute les blocs vides voulus | ||
27 | |||
28 | #print(soustab) | ||
23 | 29 | ||
24 | # Créer le sous-tableau | 30 | nbdata = nbcol*nblignes - config["nbcasesvides"]-len(config.get("phrases_add", [])) # Nombre d'entrées à prendre |
25 | if len(textes)>= nbdata: # Si y'a assez de textes | 31 | if nbdata>0: # Sinon y'a pas besoin du tableau |
26 | soustab = random.sample(textes, nbdata) + ["0"]*config["nbcasesvides"] | 32 | if nbdata <= len(textes): |
27 | else: | 33 | soustab = soustab+random.sample(textes, nbdata) |
28 | # On met tous les textes + complète avec des "0" | 34 | else: # on n'a pas assez de textes, on met des 0 |
29 | soustab = textes + ["0"]*(nbcol*nblignes - len(textes)) | 35 | soustab = soustab + textes + ['0']*(nbdata - len(textes)) |
30 | random.shuffle(soustab) | 36 | |
31 | #print(soustab) | 37 | #print(soustab) |
38 | # On mélange ! | ||
39 | random.shuffle(soustab) | ||
32 | 40 | ||
41 | # Si on ne veut pas des réponses, on ne garde que le premier élément | ||
42 | if not(config.get("reponses_presentes", True)): | ||
43 | #print("Je veux pas les réponses !") | ||
44 | soustab = [ [elt[0] ] for elt in soustab ] | ||
45 | #print(soustab) | ||
46 | |||
47 | |||
48 | # Créer la grille | ||
49 | grille = [ [ [] ]*nbcol for i in range(nblignes)] | ||
50 | |||
33 | # On met tout ça dans la grille | 51 | # On met tout ça dans la grille |
34 | for i in range(nblignes): | 52 | for i in range(nblignes): |
35 | for j in range(nbcol): | 53 | for j in range(nbcol): |
@@ -86,8 +104,21 @@ def gere_donnees_custom(data, liste_err): | |||
86 | # Les cases vides | 104 | # Les cases vides |
87 | conf["nbcasesvides"] = minimaxi(data.get("nbcasesvides",""), 0, CONFIG["maxlignes"]*CONFIG["maxcolonnes"], DEFAUT["nbcasesvides"], liste_err) | 105 | conf["nbcasesvides"] = minimaxi(data.get("nbcasesvides",""), 0, CONFIG["maxlignes"]*CONFIG["maxcolonnes"], DEFAUT["nbcasesvides"], liste_err) |
88 | 106 | ||
107 | # Les phrases additionnelles | ||
108 | conf["phrases_add"] = [] | ||
109 | i=0 | ||
110 | while "phrase_add_"+str(i) in data: | ||
111 | p = data.get("phrase_add_"+str(i), "") | ||
112 | if len(p)>1: | ||
113 | conf["phrases_add"].append([p]) | ||
114 | i=i+1 | ||
115 | |||
116 | # Veut-on les réponses ? | ||
117 | conf["reponses_presentes"] = gere_checkbox(data.get("reponses_presentes","")) | ||
118 | |||
89 | return conf | 119 | return conf |
90 | ### | 120 | |
121 | ### Fonctions pour gérer les données saisies | ||
91 | def minimaxi(donnee, mini, maxi, defaut, liste_err): | 122 | def minimaxi(donnee, mini, maxi, defaut, liste_err): |
92 | """ donnee est une chaine qui est censée être un nombre entier. | 123 | """ donnee est une chaine qui est censée être un nombre entier. |
93 | On vérifie que la donnée est valide, qu'elle est bien dans l'inter | 124 | On vérifie que la donnée est valide, qu'elle est bien dans l'inter |
@@ -98,4 +129,8 @@ def minimaxi(donnee, mini, maxi, defaut, liste_err): | |||
98 | e.warning("La donnée "+donnee+ "est invalide !", liste_err) | 129 | e.warning("La donnée "+donnee+ "est invalide !", liste_err) |
99 | x = defaut | 130 | x = defaut |
100 | x = max(mini, min(x, maxi)) | 131 | x = max(mini, min(x, maxi)) |
101 | return x \ No newline at end of file | 132 | return x |
133 | |||
134 | def gere_checkbox(donnee): | ||
135 | """ renvoie True si la donnee est à "on" et False sinon""" | ||
136 | return donnee == "on" \ No newline at end of file | ||