-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpy_maths_boss.py
251 lines (168 loc) · 9.27 KB
/
py_maths_boss.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
#############################################################################################################################
### MATHS-QUEST ###
# Pour toutes informations, veillez vous référer au dépot GitHub : https://github.com/Gandalf0207/Maths-Quest
# © Tous droits réservé 2024
# PLADEAU Quentin & LUBAN Théo
#############################################################################################################################
# DEBUT py_maths_boss #
#Ce script permet la réalisation de calculs et la création de différents résultats qui seront nécéssaires pour les questions des niveaux 'boss'
# Importation des modules nécessaires
import random # Module de l'aléatoire
from math import * # Module math
#Fonction principal de gestion (appelée depuis le script principal)
def choix_exo_niveau_boss(Niveau): # Paramètres : Niveau actuel
if Niveau ==4: # Si le niveau ==4 : l'exo sera : calcul de points d'intersections et longueur des segments, avec des calculs de volumes
#fonction de lancement / relancement si les calculs ne sont pas aux normes attendues
def reload_function():
XI = 0.0001 # Set des valeurs initiales pour pouvoir rentrer dans la boucle
YI = 0.0001
while XI != round(XI,1) or XI != round(XI, 2) or XI != round(XI, 3) or YI != round(YI,1) or YI != round(YI, 2) or YI != round(YI, 3): # Conditon : pas plus de 1 o 2 chiffres après la virgules
# Calcul coef dirrecteur de l'équation réduite sous la forme mx + p
m1 = 0.01 # Set valeur initiale pour rentrer dans la boucle
while m1 != round(m1,1):
XA = random.randint(-10,10) # Création de valeurs aléatoires
XB = random.randint(-10,10)
YA = random.randint(-10,10)
YB = random.randint(-10,10)
A = (XA, YA)
B = (XB, YB)
if (XA != 0 and XB != 0 and YA != 0 and YB != 0 ) and (XB != XA and YB != YA):
m1 = (B[1]- A[1]) / (B[0] - A[0])
p1 = A[1] - (m1*A[0])
# Calcul coef dirrecteur de l'équation réduite sous la forme mx + p
m2 = 0.01 # Set valeur initiale pour rentrer dans la boucle
while m2 != round(m2,1):
XC = random.randint(-10,10) # Création de valeurs aléatoires
XD = random.randint(-10,10)
YC = random.randint(-10,10)
YD = random.randint(-10,10)
C = (XC, YC)
D = (XD, YD)
if (XC != 0 and XD != 0 and YC != 0 and YD != 0) and (XD != XC and YD != YC):
m2 = (D[1]- C[1]) / (D[0] - C[0])
p2 = C[1] - (m2*C[0])
if m1 != m2: # Calcul des coordonnées du point d'intersection
nbx = m1 - m2
nb = -p1 + p2
XI = nb/nbx
YI = m1*XI + p1
norme_AI = sqrt((XI - XA)**2 + (YI - YA)**2) # Calculs des longueurs des [AI] et [CI]
norme_CI = sqrt((XI - XC)**2 + (YI - YC)**2)
# Création de la permière partie des résultats en fonction des valeurs de calculs
if norme_AI == norme_CI:
intersection = "Les deux bateaux vont s'entrechoquer !"
else:
intersection = "Les deux bateaux ne vont pas s'entrechoquer !"
# Bout de script pour le calcul du volumes des barrils
largeur_barril = random.randint(25,80)
longeur_barril = random.randint(55,140)
while longeur_barril < largeur_barril:
largeur_barril = random.randint(25,80)
longeur_barril = random.randint(55,140)
base = pi*(largeur_barril/2)**2
volume = base*longeur_barril
#conversion en litre, car les données sont en cm
volume_L = volume/1000
volume_L = volume_L*85
volume_L = round(volume_L,2)
return (intersection,volume_L,[A, B, C, D, longeur_barril, largeur_barril]) # On retourne s'il y a intersection, le volume en litre, les coordonnées de points et les dimensions des barils, qui serviront à l'utilisateurs pour faire ses calculs
valeur = reload_function() # Chargement de la fonction principal
# Formatage des résultats en chaînes de caractères + création de fausses réponses pour le qcm
# qcm 1
resultat = f"{valeur[0]}"
if valeur[0] == "Les deux bateaux vont s'entrechoquer !":
resultat2 = "Les deux bateaux ne vont pas s'entrechoquer !"
else:
resultat2 = "Les deux bateaux vont s'entrechoquer !"
resultat3 = f"La trajectoire des bateau ne se croise jamais !"
# qcm 2
resultat_2 = f"Le bateau b1 transporte un volume de {valeur[1]} L d'huile d'olive."
fausse_valeur = random.randint (-150, 150)
fausse_valeur2 = random.randint (-150, 150)
while (-15 < fausse_valeur < 15) and( -15 < fausse_valeur < 15):
fausse_valeur = random.randint (-150, 150)
fausse_valeur2 = random.randint (-150, 150)
resultat2_2 = f"Le bateau b1 transporte un volume de {valeur[1] + fausse_valeur} L d'huile d'olive."
resultat3_2 = f"Le bateau b1 transporte un volume de {valeur[1]+fausse_valeur2} L d'huile d'olive."
#Set des coordonnées de points pour pouvoir les renvoyer au fichier pricipal
A = valeur[2][0]
B = valeur[2][1]
C = valeur[2][2]
D = valeur[2][3]
longueur_b = valeur[2][4]
largeur_b = valeur[2][5]
points=[A, B, C, D, longueur_b, largeur_b]
if Niveau ==8: # Si le niveau ==8 : l'exo sera : calculs du volume max (dérivé ) + calculs prix (suites SG)
#brique de lait exo
a = random.randint(14,46) # random de la valeur de la longueur de la feille
while a%2 != 0 :
a = random.randint(14,46)
y_max = 0
x_max = 0
for x in range(int(a/2 + 1)) : # calcul dérivée + max volume avec comparaison en brute force
if (x*(a**2))/2 - 2*a*(x**2) + 2*(x**3) > y_max :
x_max = x
y_max = (x*(a**2))/2 - 2*a*(x**2) + 2*(x**3)
#conversion en litre
v_l = y_max/1000
#formatage résultats
add_value = random.randint(-5,5)
while add_value ==0:
add_value = random.randint(-5,5)
resultat = f"{round(v_l,2)} Litres"
resultat2 = f"{round(y_max,2)} Litres"
resultat3 = f"{round(v_l + add_value,2)} Litres"
#Suite
#exo suite SG avec calcul en fonction du nb d'année (n) et du % d'inflation
U0 = 1.20
r = 1+(random.randint(10,80)/1000)
n = random.randint(5,10)
Un = U0*(r**n)
resultat_2 = f"{round(Un,2)} €"
resultat2_2= f"{round(Un*2,2)} €"
resultat3_2 = f"{round(Un+U0,2)} €"
infos = [a,r,n] # liste avec les infos données à l'utilisateur
#On load tout les éléments de réponse : eqt / resultat vrai / les trois résultats dont 2 faux
# qcm1
L_result_possible_boss = []
L_result_possible_boss.append(resultat)
L_result_possible_boss.append(resultat2)
L_result_possible_boss.append(resultat3)
# qcm2
L_result_possible_boss2 = []
L_result_possible_boss2.append(resultat_2)
L_result_possible_boss2.append(resultat2_2)
L_result_possible_boss2.append(resultat3_2)
#on mélange
# qcm1
random.shuffle(L_result_possible_boss)
btn1_value_boss = L_result_possible_boss[0]
btn2_value_boss = L_result_possible_boss[1]
btn3_value_boss = L_result_possible_boss[2]
# qcm2
random.shuffle(L_result_possible_boss2)
btn1_value_boss_2 = L_result_possible_boss2[0]
btn2_value_boss_2 = L_result_possible_boss2[1]
btn3_value_boss_2 = L_result_possible_boss2[2]
#on crée la liste finale
Liste_exo_all_boss = []
Liste_exo_all_boss.append(resultat) # vrai résultat toujours en 1er dans l'exo des boss
Liste_exo_all_boss.append(resultat_2) # vrai résultat 2 toujours en 2e dans l'exo des boss
Liste_exo_all_boss.append(btn1_value_boss) # les valeurs mélangées pour les 2 qcm
Liste_exo_all_boss.append(btn2_value_boss) # les valeurs mélangées pour les 2 qcm
Liste_exo_all_boss.append(btn3_value_boss) # les valeurs mélangées pour les 2 qcm
Liste_exo_all_boss.append(btn1_value_boss_2) # les valeurs mélangées pour les 2 qcm
Liste_exo_all_boss.append(btn2_value_boss_2) # les valeurs mélangées pour les 2 qcm
Liste_exo_all_boss.append(btn3_value_boss_2) # les valeurs mélangées pour les 2 qcm
if Niveau ==4:
Liste_exo_all_boss.append(points) # la liste des coordonnées de points pour le niveau 4
elif Niveau ==8:
Liste_exo_all_boss.append(infos) # la liste des infos
return Liste_exo_all_boss # On retourne cette liste avec toutes les informations nécéssaires à la création de l'exercices dans le fichier principal
# FIN py_maths_boss #
#############################################################################################################################
### MATHS-QUEST ###
# Pour toutes informations, veillez vous référer au dépot GitHub : https://github.com/Gandalf0207/Maths-Quest
# © Tous droits réservé 2024
# PLADEAU Quentin & LUBAN Théo
#############################################################################################################################