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
|
import lceb
mode='123'
opok2 = False # True lorsque le nombre saisi est correct
while not opok2: # Tant que le nombre n'est pas parmi 1,2,3
print("Taper le '1' pour le mode normal, le '2' pour le mode opération et enfin le '3' pour le mode ordre")
nbbis = input() # On demande un opérateur
if nbbis in mode: # l'opérateur entré est valide
opok2 = True
if nbbis == 1:
lceb.lceb()
#le programme mode:
def lire_mode():
mode='123'
opok = False # True lorsque le nombre saisi est correct
while not opok: # Tant que le nombre n'est pas parmi 1,2,3
print("Taper le '1' pour le mode normal, le '2' pour le mode opération et enfin le '3' pour le mode ordre")
nb = input() # On demande un opérateur
if nb in mode: # l'opérateur entré est valide
opok = True
return nb
#et le programme lceb()
from random import randint
from random import shuffle
import time
from itertools import permutations, product
def lceb():
# Construction de la liste de nombres autorisés
nombres = []
nombres.extend(range(1,11)) # Tous les chiffres de 1 à 10
nombres.extend(range(1,11)) # Tous les chifffres de 1 à 10
nombres.extend([25,50,75,100]) # une fois chaque multiple de 25 jusqu'à 100
# Liste contruite par les 3 lignes précédentes
#nombres = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ,1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10, 25, 50, 75, 100]
# Liste des 4 opérateurs
ops = '*+/-'
# Avant le tirage la liste des nombres tirés au sort est vide
current_list=[]
##Definition de l'objectif - Tirage des 6 nombres
# Objectif et tirage pour le jeu normal :
obj=randint(100,999) # 100 <= Objectif < 1000
current_list = tirage(nombres)
# Sauvegarde de la liste initiale pour la recherche automatique de solution
saved_current_list = list(current_list)
##Début du jeu
print('\t# Tirage initial :' ,current_list, '- objectif :', obj, '#')
print()
win = False # Le joueur n'a pas encore gagné
play = True # Le jeu est en cours
##Le joueur commence
coups = 0 # Nombre de coups joués
while len(current_list)!=1 and not win and play : # tant que la liste n'est pas vide, la solution n'a pas été trouvée, le joueur n'a pas interrompu le jeu...
print(Joueur, ', entrez votre opération ou "f" si terminé ou "h" pour voir les règles:')
# Lecture du premier terme de l'opération
nbok = False
nb1, play, current_list = lire_nombre(play, coups, current_list)
if not play: break # Si le joueur a souhaité arreter le jeu
# Lecture de l'opérateur
op, play = lire_operateur(play, coups, ops)
if not play: break
# Lecture du second terme de l'opération
nbok = False
nb2, play, current_list = lire_nombre(play, coups, current_list)
if not play: break # Si le joueur a souhaité arreter le jeu
# Calcul de l'opération choisie par le joueur
res = operations(nb1,nb2,op)
if type(res) is str: # division non entière ou soustraction négative
print('opération non valide, reprenez')
current_list.append(nb1) # on remet dans la liste les nombres saisis
current_list.append(nb2)
continue
if res == obj: # si la solution est trouvée
win=True # Le joueur a gagné
# Affichage de l'opération saisie
print('\t\t###', nb1, op, nb2, '=' , res, '###' )
print()
coups+=1 # on incrémente le nombre de coups
current_list.append(res) # on ajoute le résultat courant à la liste
if (len(current_list) != 1):
print('\t# Tirage courant :' ,current_list, '- objectif :', obj, '#')
if win: # si c'est gagné
print()
print('### GAGNE en ', coups, ' coups : LE COMPTE EST BON !!! ###')
else: # si c'est perdu
# on cherche le nombre le plus proche de l'objectif
# on fabrique une liste qui contient les ecarts avec l'objectif (en valeur absolue)
diff = [abs(x - obj) for x in current_list]
# on cherche le minimum de cette liste
mini = min(diff)
print('### PERDU !!! Vous avez atteint ', current_list[diff.index(mini)], '(objectif :', obj,') ###')
#voici les prog annexe au cas ou
# Lecture de l'opérateur parmi + - / *
def lire_operateur(play, coups, ops):
opok = False # True lorsque l'opérateur saisi est correct
while not opok: # Tant que l'opérateur n'est pas parmi + - / ! p *
print('\t', coups+1, " : [* + - /] " '?', end='')
op = input() # On demande un opérateur
if op in ops: # l'opérateur entré est valide
opok = True
elif op == 'f': #Si f est entré
play = False #On stoppe le jeu
break
elif op == 'h':
os.startfile("consigne lceb.pdf")
return op, play # On retourne l'opérateur choisi et si le jeu continue ou pas
# Lecture d'un nombre
def lire_nombre(play, coups, current_list):
nbok = False # True lorsque le nombre saisi est correct
while (not nbok): # Tant que le nombre saisi n'est pas correct
print('\t', coups+1, ' : ', current_list, ' ? ', end='')
nb1=input() # On demande le nombre
if nb1 == 'f': # Si f est entré
play = False # On stoppe le jeu
break
if nb1 == 'h':
os.startfile("consigne lceb.pdf")
nbok = False
if nb1.isdigit(): # si la chaine de caractères saisie est un nombre
nb1 = int(nb1) # Conversion de la chaine de caractère en entier
if nb1 in current_list: # si ce nombre est dans la liste
nbok = True
current_list.pop(current_list.index(nb1)) # on retire le nombre de la liste du tirage courant
return nb1, play, current_list # On retourne le nombre, si le jeu continue ou non, et le tirage courant
# Tirage au sort des 6 nombres proposés
def tirage(nombres):
current_list = []
shuffle(nombres) # on mélange la liste des nombres autorisés dans le jeu
for i in range(1,7):
current_list.append(nombres[i]) # on prend les 6 premiers
return current_list # On retourne les 6 nombres
## definitions des fonctions (4 opérations)
def operations(a,b,op):
if op =='*': # Multiplication
return(int(a*b))
elif op == '/': # Division
if a%b==0: # si le résultat de la division est entier
return(int(a/b))
else:
return('Division non entière') # Si la division n'est pas entière, on retourne une chaine de caractères
elif op =='+': # Addition
return(int(a+b))
elif op == '-': # Soustraction
if a>b: # si le résultat de la soustraction est positif
return(int(a-b))
else:
return('Soustraction négative ou nulle') # Si la soustraction est négative, on retourne une chaine de caractères
else:
return None |
Partager