Faire un choix aléatoire et afficher le temps pour répondre.

Résolu/Fermé
steph30470 Messages postés 114 Date d'inscription dimanche 3 juillet 2011 Statut Membre Dernière intervention 31 juillet 2014 - 28 oct. 2013 à 20:56
steph30470 Messages postés 114 Date d'inscription dimanche 3 juillet 2011 Statut Membre Dernière intervention 31 juillet 2014 - 3 nov. 2013 à 16:12
Bonjour, voilà j'ai un problème, j'aimerai afficher des multiplications une par une aléatoirement, par exemple faire un programme ou il faut résoudre le plus vite 10 multiplications.
Sa doit vous paraître simple mais pas pour moi, donc si quelqu'un peu m'aider et aussi a la fin des 10 multiplications j'aimerai dire combien sont juste et puis le temps qu'il a fallut pour l'ai faire...Je ne vous demande pas de m'écrire le code hein juste quelques indications qui peuvent m'aider, je suis débutant et j'essaye de m'entraîner petit a petit sur des programmes donc voilà merci beaucoup.
A voir également:

15 réponses

nidhogg-59 Messages postés 102 Date d'inscription mercredi 20 juin 2012 Statut Membre Dernière intervention 5 décembre 2015 27
Modifié par nidhogg-59 le 30/10/2013 à 15:46
Bonjour!

Si j'ai bien compris, tu veux faire un programme qui affiche des multiplication à résoudre et qui teste si les réponses sont bonnes et enfin affiche le nombre de bonne réponses?

Si c'est bien ça, tu peux créer l'aléatoire en important du module random la fonction randrange:
from random import randrange
par exemple, randrange(5,10) va renvoyer un nombre aléatoire entre 5(compris) et 10(non compris).
Donc dans ton programme, tu vas avoir 2 valeurs aléatoires enregistrées dans 2 variable.

Ensuite pour ce qui est de calculer le résultat, tu peux multiplier tes variables et enregistrer le résultat dans une troisième variable.

Ensuite tu affiche ta multiplication dans le terminal et tu récupère la valeur entrée par l'utilisateur grâce à raw_input() (python2) ou input() (python3).

Enfin, tu teste si la valeur entrée == la réponse que tu as calculé, est si c'est le cas, tu incrémente une variable que tu aura préalablement créé et initialisé à 0.

Pour ce qui est du temps de calcul, tu peux utiliser la fonction time() du module time:
from time import time
Il renvoie le nombre de secondes écoulées depuis janvier 70 (si je me souviens bien...) donc pour calculer le temps pris pour répondre tu peux créer une variable maVariable=time()
puis laisser la personne répondre à la multiplication et enfin faire
tempsDeReponse=time()-maVariable

Enfin, tu affiche le nombre de bonnes réponses sur le nombre de multiplications proposé avec un print.

Voilà! dans l'espoir de t'avoir aidé!
ps: si tu veux je peux te passer des bouts de code, mais comme j'ai vu que tu ne voulais pas, j'en ai mis le moins possible...
1
steph30470 Messages postés 114 Date d'inscription dimanche 3 juillet 2011 Statut Membre Dernière intervention 31 juillet 2014 6
31 oct. 2013 à 13:57
Wahou merci beaucoup, ben comme finalement j'ai renoncé vu l'expérience que sa demande(oui je suis qu'un tout petit débutant), je veux bien que tu me passes des bouts de code juste pour que je comprenne mieux, pour que je décortique et que je voie a quoi sert ceci et à quoi sert cela pour ensuite pouvoir le réutiliser dans d'autre programme :) Merci à toi !
0
nidhogg-59 Messages postés 102 Date d'inscription mercredi 20 juin 2012 Statut Membre Dernière intervention 5 décembre 2015 27
1 nov. 2013 à 22:00
Voilà, j'ai commenté mon code pour qu'il soit compréhensible, mais si tu as des questions sur quoi que ce soit, demande!
#!/usr/bin/python
# -*- conding: utf-8 -*-
from random import randrange
from time import time

bonnesReponses=0 # variable de bonnes reponses a incrementer a chaque bonne reponse
nombreMultiplications=10 # propose 10 multiplications
tempsDepart=time() # permet de determiner le temps qu'a mit la personne a repondre aux questions

for i in range(nombreMultiplications):

nombre1=randrange(10) # on met un nombre aleatoire entre 0(compris) et 10(non compris) dans la variable nombre1
nombre2=randrange(10) # si on veut un nombre entre 5 et 15 par exemple, en ecrit nombre2=randrange(5,16)

reponseJuste=nombre1*nombre2 # calcul de la bonne reponse

reponseUtilisateur=raw_input(str(nombre1)+"*"+str(nombre2)+" = ") # affichage de la multiplication et recuperation de la reponse de l'utilisateur

if int(reponseUtilisateur)==reponseJuste:
bonnesReponses+=1# on incremente si la personne a trouve la bonne reponse

tempsTotal=(time()-tempsDepart)/60.0 # time() est en secondes, pour avoir des minutes, on divise donc par 60

print "{} bonnes reponses sur {} questions, en {} minutes!".format(bonnesReponses,nombreMultiplications, tempsTotal)# on affiche le score total
0
steph30470 Messages postés 114 Date d'inscription dimanche 3 juillet 2011 Statut Membre Dernière intervention 31 juillet 2014 6
1 nov. 2013 à 23:29
Oh bien merci pour m'avoir écris ce code vraiment, mais entre temps je me suis dis que abandonner ne servait a rien et donc que je devrais persister j'ai regarder quelque cours sur internet et j'ai réussi à faire un code je te montre ce que sa donne :
from random import choice
from time import time
multi =['3 x 4 = 12',
'4 x 4 =16',
'5 x 4 =20',
'6 x 4 =24',
'7 x 4 =28',
'8 x 4 =32',
'9 x 4 =36',
'2 x 8 =16',
'3 x 8 =24',
'4 x 8 =32',
'5 x 8 =40',
'6 x 8 =48',
'7 x 8 =56',
'8 x 8 =64',
'9 x 8 =72',
'2 x 9 =18',
'3 x 9 =27',
'4 x 9 =36',
'5 x 9 =45',
'6 x 9 =54',
'7 x 9 =63',
'8 x 9 =72',
'9 x 9 =81',
'2 x 4 =8',
'3 x 4 =12',
'4 x 4 =16',
'5 x 4 =20',
'6 x 4 =24',
'7 x 4 =28',
'8 x 4 =32',
'9 x 4 =36',
'2 x 6 =12',
'3 x 6 =18',
'4 x 6 =24',
'5 x 6 =30',
'6 x 6 =36',
'7 x 6 =42',
'8 x 6 =48',
'9 x 6 =54',]
true =["Bravo","Bien joué","C'est ça!","WAHOUU!","Champion","Facile"]
false=["Nul!","T'es en quelle classe?","Aie Aie","Mauvais","Elle était facile pourtant..."]


#Premiére boucle---------------------------------------------------------------------------------------

input("Répondez le plus vite possible à 10 multiplications,\nappuyez sur entrée pour commencer.")
n = 0
a = 0
debut=time()
while n != 10:
quest = choice(multi)
reponse = input(quest.split('=')[0]+ '=')
if reponse == quest.split('=')[1]:
tr = choice(true)
print(tr)
a = a+1
else:
fa = choice(false)
print(fa)
n = n+1
fin=time()-debut
print("Vous avez mis",(int(fin)),"secondes, et vous avez",a,"bonne réponse")
#--------------------------------------------------------------------------------------------------------
out=input("Voulez vous réessayez?(N/O)")


rep=("n","N","Non","non","NON")
o=("o","Oui","O","OUI","oui")

#----------------------------------------------------------------------------------------------------------

while out in o:
input("Répondez le plus vite possible à 10 multiplications,\nappuyez sur entrée pour commencer.")
n = 0
a = 0
debut=time()
while n != 10:
quest = choice(multi)
reponse = input(quest.split('=')[0]+ '=')
if reponse == quest.split('=')[1]:
tr = choice(true)
print(tr)
a = a+1
else:
fa = choice(false)
print(fa)
n = n+1

fin=time()-debut
print("Vous avez mis",(int(fin)),"secondes, et vous avez",a,"bonne réponse")

out=input("Voulez vous réessayez?(N/O)")



#-------------------------------------------------------------------------------------------------------------
if out in rep:
input("A plus tard! Appuyez sur une touche pour quitter")
Un peu plus grand car j'ai dû mettre des choses inutiles mais bon voilà ce que sa donne.
Tu peux me dire ce que tu en penses?
& tant qu'on y est tu peux me dire si il est possible d'afficher les scores, par exemple de mettre à chaque fin de partie : 1ére partie : 10 bonnes réponses pour 15 secondes
2éme partie : 6 bonnes reponses pour 8 secondes..Etc
Merci beaucoup!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nidhogg-59 Messages postés 102 Date d'inscription mercredi 20 juin 2012 Statut Membre Dernière intervention 5 décembre 2015 27
2 nov. 2013 à 00:37
Bah c'est plutôt bien! T'as fais un programme plus développé que le mien! ^^
Mais il y a quelque chose que j'ai tout de suite remarqué, et t'as du aussi le voir: il y a deux parties identiques dans ton programme. Pour améliorer ça tu peux faire:


a = 0
rep=("n","N","Non","non","NON")
o=("o","Oui","O","OUI","oui")
while 1:
raw_input("Répondez le plus vite possible à 10 multiplications,\nappuyez sur entrée pour commencer.")
n = 0
debut=time()
while n != 10:
quest = choice(multi)
reponse = raw_input(quest.split('=')[0]+ '=')
if reponse == quest.split('=')[1]:
tr = choice(true)
print(tr)
a = a+1
else:
fa = choice(false)
print(fa)
n = n+1
fin=time()-debut
print("Vous avez mis",(int(fin)),"secondes, et vous avez",a,"bonne réponse")
out=raw_input("Voulez vous réessayez?(N/O)")

if out in rep:
raw_input("A plus tard! Appuyez sur une touche pour quitter")
exit()

En gros, je n'ai pas vraiment modifié ton programme ,j'ai juste déplacé tes variables 'rep' et 'o' au début, et fait une boucle infinie avec 'while 1:' autour de la partie qui pose les questions, qu'on peut quitter grâce à 'exit()', qui permet de quitter le programme.

Ensuite, niveau esthétique, tu as du remarquer que les virgules s'affichaient, par exemple dans:
print("Vous avez mis",(int(fin)),"secondes, et vous avez",a,"bonne réponse")
Ce n'est pas vraiment un problème, mais si tu comptes y remédier, tu peux faire ceci:
print("Vous avez mis"+str(int(fin)+"secondes, et vous avez"+str(a)+"bonne réponse")

Enfin, et encore une fois ce ne sont pas des erreurs, mais simplement des variables en plus, que tu n'a pas besoin de créer, comme dans:
tr = choice(true)
print(tr)
que tu peux simplement remplacer par
print choice(true)
c'est juste plus court...
ah, j'oubliais, il y a aussi le while n!=10 que tu peux changer: à la place d'écrire

while n != 10:
...
n = n+1

tu peux simplement écrire

for i in range(10):
...
mais encore une fois, ce n'est pas une erreur, c'est simplement plus court...

Alors! Pour ce qui est d'afficher les scores et temps entre chaque parties, ce que tu peux faire, c'est les enregistrer dans une liste, et à la fin de chaque partie, les afficher. Je m'explique :
Au début de ton programme tu créé une liste vide, disons
mesScores=[]
et à chaque fin de partie, juste avant de demander si on veut continuer ou pas, tu
enregistrer tes scores comme ceci:
mesScores.append([fin,a])

puis tu peux afficher les scores comme ceci:
for i in range(len(mesScores)):
print "partie "+str(i)+": "+str(i[1])+" bonnes réponses pour "+str(i[0])+" secondes"

Bon, j'espère t'avoir aidé! Si tu as de nouvelle(s) question(s), n'hésite pas!
=)
0
steph30470 Messages postés 114 Date d'inscription dimanche 3 juillet 2011 Statut Membre Dernière intervention 31 juillet 2014 6
2 nov. 2013 à 01:28
& bien je te remercie grandement pour tout ces conseil merci, oui j'ai fais plein de chichi parce que je sais pas trop manipuler encore donc j'essaie de faire avec les moyens du bord :p Pour ce qui est de while n != 10, je vais le garder pour pas n'embrouiller pour l'instant :D Sinon merci pour tes conseil et pour ce qui est du score je le ferai demain.
Encore une fois merci beaucoup c'est à dire que depuis 2 ou 3 heures je galère pour le truc du score donc bon...
Merci !
0
steph30470 Messages postés 114 Date d'inscription dimanche 3 juillet 2011 Statut Membre Dernière intervention 31 juillet 2014 6
2 nov. 2013 à 02:08
Malheureusement sa ne marche pas pour l'histoire des score :/ sa me fais une erreur ... et en plus nous n'avons pas la même version de Python,
je te refile le code, pour voir si tu vois ou je me suis planté.
from random import choice
from time import time
score=[]
multi =['3 x 4 = 12',
'4 x 4 =16',
'5 x 4 =20',
'6 x 4 =24',
'7 x 4 =28',
'8 x 4 =32',
'9 x 4 =36',
'2 x 8 =16',
'3 x 8 =24',
'4 x 8 =32',
'5 x 8 =40',
'6 x 8 =48',
'7 x 8 =56',
'8 x 8 =64',
'9 x 8 =72',
'2 x 9 =18',
'3 x 9 =27',
'4 x 9 =36',
'5 x 9 =45',
'6 x 9 =54',
'7 x 9 =63',
'8 x 9 =72',
'9 x 9 =81',
'2 x 4 =8',
'3 x 4 =12',
'4 x 4 =16',
'5 x 4 =20',
'6 x 4 =24',
'7 x 4 =28',
'8 x 4 =32',
'9 x 4 =36',
'2 x 6 =12',
'3 x 6 =18',
'4 x 6 =24',
'5 x 6 =30',
'6 x 6 =36',
'7 x 6 =42',
'8 x 6 =48',
'9 x 6 =54',]

true =["Bravo","Bien joué","C'est ça!","WAHOUU!","Champion","Facile"]
false=["Nul!","T'es en quelle classe?","Aie Aie","Mauvais","Elle était facile pourtant..."]

a = 0
rep=("n","N","Non","non","NON")
o=("o","Oui","O","OUI","oui")
while 1:
input("Répondez le plus vite possible à 10 multiplications,\nappuyez sur entrée pour commencer.")
n = 0
debut=time()
while n != 10:
quest=choice(multi)
reponse = input(quest.split('=')[0]+ '=')
if reponse == quest.split('=')[1]:
tr = choice(true)
print(tr)
a = a+1
else:
fa = choice(false)
print(fa)
n = n+1
fin=time()-debut
print("Vous avez mis",(int(fin)),"secondes, et vous avez",a,"bonne réponse")



score.append([fin,a])
for i in range(len(score)):
print ("partie "+str(i)+": "+str(i[1])+" bonnes réponses pour "+str(i[0])+" secondes")
out=input("Voulez vous réessayez?(N/O)")
if out in rep:
input("A plus tard! Appuyez sur une touche pour quitter")
break

Merci :D
0
nidhogg-59 Messages postés 102 Date d'inscription mercredi 20 juin 2012 Statut Membre Dernière intervention 5 décembre 2015 27
2 nov. 2013 à 12:36
Bonjour! Heu... en effet, je me suis trompé. J'ai écris ce code sans l'avoir testé, désolé.
Voilà ce que ça donne, corrigé et en version python3:

#!/usr/bin/python3
# -*- coding: latin-1 -*-
from random import choice
from time import time
score=[]
multi =['3 x 4 = 12',
'4 x 4 =16',
'5 x 4 =20',
'6 x 4 =24',
'7 x 4 =28',
'8 x 4 =32',
'9 x 4 =36',
'2 x 8 =16',
'3 x 8 =24',
'4 x 8 =32',
'5 x 8 =40',
'6 x 8 =48',
'7 x 8 =56',
'8 x 8 =64',
'9 x 8 =72',
'2 x 9 =18',
'3 x 9 =27',
'4 x 9 =36',
'5 x 9 =45',
'6 x 9 =54',
'7 x 9 =63',
'8 x 9 =72',
'9 x 9 =81',
'2 x 4 =8',
'3 x 4 =12',
'4 x 4 =16',
'5 x 4 =20',
'6 x 4 =24',
'7 x 4 =28',
'8 x 4 =32',
'9 x 4 =36',
'2 x 6 =12',
'3 x 6 =18',
'4 x 6 =24',
'5 x 6 =30',
'6 x 6 =36',
'7 x 6 =42',
'8 x 6 =48',
'9 x 6 =54',]

true =["Bravo","Bien joué","C'est ça!","WAHOUU!","Champion","Facile"]
false=["Nul!","T'es en quelle classe?","Aie Aie","Mauvais","Elle était facile pourtant..."]

rep=("n","N","Non","non","NON")
o=("o","Oui","O","OUI","oui")
while 1:
input("Répondez le plus vite possible à 10 multiplications,\nappuyez sur entrée pour commencer.")
n = 0
a = 0
debut=time()
while n != 10:
quest=choice(multi)
reponse = input(quest.split('=')[0]+ '=')
if reponse == quest.split('=')[1]:
tr = choice(true)
print(tr)
a = a+1
else:
fa = choice(false)
print(fa)
n = n+1
fin=time()-debut
print("Vous avez mis",(int(fin)),"secondes, et vous avez",a,"bonne réponse")



score.append([fin,a])
for i in range(len(score)):
print ("partie "+str(i+1)+": "+str(score[i][1])+" bonnes réponses pour "+str(score[i][0])+" secondes")
out= input("Voulez vous réessayez?(N/O)")
if out in rep:
input("A plus tard! Appuyez sur une touche pour quitter")
break
Là, par contre j'ai testé et ça fonctionne! =)
0
steph30470 Messages postés 114 Date d'inscription dimanche 3 juillet 2011 Statut Membre Dernière intervention 31 juillet 2014 6
2 nov. 2013 à 14:22
Merci beaucoup, j'ai penser rajouter l'options voulez vous voir vos score au moins l'utilisateur a ces scores que lorsque il le veux, sinon merci beaucoup ;)
0
steph30470 Messages postés 114 Date d'inscription dimanche 3 juillet 2011 Statut Membre Dernière intervention 31 juillet 2014 6
Modifié par steph30470 le 2/11/2013 à 15:35
Bon merci beaucoup vraiment, j'y suis arrivé comme quoi faut jamais renoncer :p Bon c'est sûr que j'y serai jamais arriver sans ton aide mais bon au moins j'aurai appris des trucs sa c'est sur :D Encore merci mille fois, et je vous demande juste un derniers truc pour des appli comme ça, si je veux les partager avec des ami(e)s comment puis-je faire pour leurs donner le fichier qu'ils peuvent exécuter mais sans python en gros au lieu de un_fichier.py j'aurai un_fichier.exe qui s'exécute avec l'invite de commande. Je sais pas si j'ai été très clair enfin bon voilà merci beaucoup!
Tant qu'on y est je voulais savoir à quoi servent c'est signes "+=" un truc comme ça voilà x) merci!
0
nidhogg-59 Messages postés 102 Date d'inscription mercredi 20 juin 2012 Statut Membre Dernière intervention 5 décembre 2015 27
2 nov. 2013 à 14:38
Si tu veux ajouter des options, tu peux aussi faire des tables personnalisées, par exemple tu peux demander les tables de combien à combien avec input et créer une liste de multiplications :
a=int(input("de "))
b=int(input(" à "))
multi=[]
for i in range(a,b+1):
for j in range(a,b+1):
multi.append(str(i)+" * "+str(j)+" ="+str(i*j))
Voilà
c'est une méthode beaucoup moins longue pour faire ta liste de multiplications!

! bonne journée!
0
steph30470 Messages postés 114 Date d'inscription dimanche 3 juillet 2011 Statut Membre Dernière intervention 31 juillet 2014 6
2 nov. 2013 à 15:36
Merci oui , et je vous demande juste un derniers truc pour des appli comme ça, si je veux les partager avec des ami(e)s comment puis-je faire pour leurs donner le fichier qu'ils peuvent exécuter mais sans python en gros au lieu de un_fichier.py j'aurai un_fichier.exe qui s'exécute avec l'invite de commande. Je sais pas si j'ai été très clair enfin bon voilà merci beaucoup!
Tant qu'on y est je voulais savoir à quoi servent c'est signes "+=" un truc comme ça voilà x) merci!
0
steph30470 Messages postés 114 Date d'inscription dimanche 3 juillet 2011 Statut Membre Dernière intervention 31 juillet 2014 6
2 nov. 2013 à 19:20
C'est bon j'y suis arriver :P Merci à tous.
0
nidhogg-59 Messages postés 102 Date d'inscription mercredi 20 juin 2012 Statut Membre Dernière intervention 5 décembre 2015 27
3 nov. 2013 à 00:47
Ah, j'avais pas vu ta question. Pour ce qui est de transformer un .py en .exe, tu peux chercher du côté de Py2exe (étant sous linux, je ne l'utilise pas et ne sais pas comment l'utiliser).
Pour ce qui est des +=, ce sont des raccourcis
en gros tu peux faire pour les nombres:
a+=2 pour a=a+2
a-=4 pour a=a-4
a*=3 pour a=a*3
a/=5 pour a=a/5
a**=3 pour a=a**3 (a=a puissance 3)
a**=0.5 pour a**=0.5 (a=racine carrée de a)

pour les chaines de caractère:
chaineDeCaractère+="autre chaine"
>>>a="abcd"
>>>a*=3
>>>a
'abcdabcdabcd'

et ça marche aussi pour les listes et plein d'autres truc:
>>>a=[3,4]
>>>a+=[1,2]
>>>a
[3,4,1,2]
>>>a*=2
>>>a
[3,4,2,1,3,4,2,1]

'fin bref, je crois que t'as compris! ^^
if y en a plein d'autre, je suppose...
et un dernier petit conseil en partant: si tu cherches une méthode a appliquer sur un objet, tu peux (par exemple si c'est un string) faire help(str), voilà!

J'espère ne pas être arrivé après la bataille! ><
0
steph30470 Messages postés 114 Date d'inscription dimanche 3 juillet 2011 Statut Membre Dernière intervention 31 juillet 2014 6
3 nov. 2013 à 16:12
Bon ben merci c'est bon à savoir tout ça j'ai fini le programme je t'enverrai bien le .exe mais je ne sais pas comment faire sur ce forum pour joindre un fichier x) Donc bon tu dois voir à quoi sa ressemble de toute façon :) Merci beaucoup à toi :D
0