Imprimer
Catégorie : Programmation Python - 2nde SNT
Affichages : 2702

Principe du jeu

Au lancement du programme, un nombre entier est aléatoirement tiré entre 10 et 1000. Ce nombre doit être décomposé en facteurs premiers par le joueur. Pour aider le joueur qui n'aurait pas de chance et qui tomberait sur 674, l'affichage de la liste lui présente tous les nombres premiers entre 1 et 1000.

Le joueur décompose le nombre proposé, puis saisie ses réponses successivement dans l'ordre croissant (il peut se tromper dans l'ordre).

S'il a tout bon, le joueur est félicité, si une erreur est saisie, alors il peut rejouer (je sais c'est moche!)

Simulation

>>> %Run 'jeu facteurs premier.py'
Décomposez en facteurs premiers le nombre  35
Pour vous aidez, liste des nombres premiers entre 1 et 1000
Liste= [1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997]
Vous devez saisir  3  facteurs. Notez que le premier est facile ;)
Saisir votre premier facteur par ordre croissant, puis les suivants : 1
Saisir votre premier facteur par ordre croissant, puis les suivants : 5
Saisir votre premier facteur par ordre croissant, puis les suivants : 7
Je vous félicite!
Les diviseurs de  35  sont  [1, 5, 7]

Pour le script, lire la suite ;)

Script du jeu

# Jeu pour s'exercer sur la décomposition en facteur de nombres premiers
# etape nombre aléatoire entre 10 et 1000
from random import randint
nbre=randint(10,1000)
print ("Décomposez en facteurs premiers le nombre ",nbre)
#liste des nombres premiers entre 1 et 1000
premier=[1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997]
print("Pour vous aidez, liste des nombres premiers entre 1 et 1000\nListe=",premier)
#mise en memoire du nombre initial
nbreini=nbre
# initialisation des variables
diviseur=[1]
reponse=[]
i=2

# Test
while i<=nbre:
    if nbre%i==0:
        diviseur.append(i)
        nbre=nbre/i
    else:
        i=i+1
#nombre de réponses à saisir par le joueur
#et saisie du joueur
n=len(diviseur)
print("Vous devez saisir ",n," facteurs. Notez que le premier est facile ;)")
j=0
while j<n:
    reponse.append(int(input("Saisir votre premier facteur par ordre croissant, puis les suivants : ")))
    j=j+1
# tri croissant des saisies du joueur
reponsetri=sorted(reponse)
# comparaison des réponses en faisant de proche en proche les différences entre la réponse du joueur et la valeur
j=0
somme=0
while j<n:
    somme=somme+reponsetri[j]-diviseur[j]
    j=j+1
if somme ==0:
    print("Je vous félicite!")
else:
    print("Votre doigt a fouché! Il faut recommencer")
# Impression du résultat        
print("Les diviseurs de ",nbreini," sont ",diviseur)