begin process at 2010 07 29 15:40:25
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Jeux

 > COMPTEBON.PY

COMPTEBON.PY


 Information sur la source

Note :
Aucune note
Catégorie :Jeux Classé sous :compte-bon, classe, pygame attendu Niveau :Débutant Date de création :12/02/2010 Vu / téléchargé :1 023 / 49

Auteur : ACONNES

Ecrire un message privé
Commentaire sur cette source (0)
Ajouter un commentaire et/ou une note

 Description

Encore un "le compte est bon". Mais dans ce cas une classe permet
- de genérer aléatoirement le tirage, le but à atteindre
- de contrôler les opérations d'un utilisateur (élève du primaire).
Au lancement, une aide (succinte) est fournie.
Le développement utilisant pygame est en cours.

Source

  • #!/usr/bin/env python
  • # -*- coding: UTF-8 -*-
  • __author__ = u"André Connes <andre.connes at wanadoo.fr>"
  • __version__ = "10.02.12" # cad 12 février 2010
  • __copyright__ = "GPL le terrier <AbulEdu.org> "
  • # Usage : python compteBon.py
  • # une aide initiale (succinte) indique ce qu'il faut faire.
  • # Cette classe génére une liste de nombres, un but et contrôle les réponses d'un
  • # utilisateur (élève du primaire).
  • # Cette classe sera utilisée dans une version graphique en préparation sous pygame
  • from random import randint
  • # from config import MIN, MAX, AUCHOIX, OPS
  • # ATTENTION : bien adapter MIN, MAX, AUCHOIX et OPS
  • MIN = 567 # but > MIN
  • MAX = 5678 # but < MAX
  • AUCHOIX = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 25, 50, 75, 100]
  • OPS = ["+", "-", "*", "/"]
  • #MIN = 234 # but > MIN
  • #MAX = 999 # but < MAX
  • #AUCHOIX = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 25, 50, 75, 100]
  • #OPS = ["+", "-", "*"]
  • class CompteBon:
  • # le constructeur
  • def __init__(self):
  • self.tirage = [] # le tirage a lieu dans cette liste, sans doublon
  • self.but = 0 # le nombre à trouver
  • self.expressions = [] # calculs successifs générés pour définir le but
  • # générer tirage, but et expressions
  • def generer(self):
  • while 1:
  • self.auChoix = AUCHOIX[:]
  • self.tirage, self.but, self.expressions = [], 0, []
  • self._tirage()
  • t = self._sous_tirage()
  • while len(t) != 1:
  • self._utiliser2nombres(t) # calculs réalisés : met-à-jour expressions et t
  • if MIN <= t[0] < MAX: break
  • self.but = t[0]
  • # contrôler les réponses de l'élève-utilisateur
  • def resoudre(self):
  • nombres = self.tirage[:]
  • print "** ** ** ** ** But = %s ** ** ** ** **" % self.but
  • while 1:
  • print "Nombres à utiliser : %s" % nombres
  • try:
  • ne = raw_input(" nouveau calcul : ")
  • if ne == "n": break
  • if ne == "h": help(); continue
  • if ne == "s": print self.expressions; continue
  • if ne.find("+") >= 0: s = ne.split("+")
  • elif ne.find("-") >= 0: s = ne.split("-")
  • elif ne.find("*") >= 0: s = ne.split("*")
  • elif ne.find("/") >= 0: s = ne.split("/")
  • m = map(int, s)
  • except:
  • print u"aîe, 'entier op entier' attendu"
  • continue
  • if not ((m[0] in nombres) and (m[1] in nombres)):
  • print "Nombres dans la liste attendus"
  • continue
  • nombres.remove(m[0])
  • nombres.remove(m[1])
  • nombres.append(eval(ne))
  • if self.but in nombres:
  • print "Bravo, %s atteint !\n" % self.but
  • break
  • if len(nombres) == 1:
  • print "Hélàs, c'est faux. Voici une solution : %s\n" % self.expressions
  • break
  • #
  • # méthodes protégées
  • #
  • # créer la liste 'tirage' des nombres à utiliser, sans doublon
  • def _tirage(self):
  • p = randint(6, 8) # nombre de nombres proposés
  • for i in xrange(p):
  • a = randint(0, len(self.auChoix)-1) # tirage de l'index d'un nombre
  • t = self.auChoix[a] # valeur du tirage
  • self.auChoix.remove(t) # pour éviter les doublons
  • self.tirage.append(t) # un tirage de plus
  • self.tirage.sort()
  • # sous_tirage pour générer le but (tous les nombres de cette liste seront utilisés)
  • def _sous_tirage(self):
  • t = self.tirage[:]
  • for i in xrange(randint(1,3)):
  • a = t[randint(0,len(t)-1)]
  • t.remove(a)
  • return t
  • # choix d'une opération
  • def _op(self):
  • n = randint(0,len(OPS)-1)
  • return OPS[n]
  • # vérifier que le calcul proposé est satisfisant (positif et entier)
  • def _verification(self, n, op, ta, tb):
  • if n <= 0: return False
  • if op == "*": return (ta != 1) and (tb != 1)
  • if op == "/":
  • if tb == 1: return False
  • else: return ta == tb * n
  • return True
  • # choisir 2 nombres du sous_tirage, effectuer le calcul
  • def _utiliser2nombres(self,t):
  • ok = False
  • while not ok:
  • op = self._op()
  • a, b = 0, 0
  • while a == b:
  • a, b = randint(0, len(t)-1), randint(0, len(t)-1)
  • ta, tb = t[a], t[b]
  • expression = str(ta)+op+str(tb)
  • try:
  • n = eval(expression)
  • except:
  • continue
  • if self._verification(n, op, ta, tb):
  • #print expression
  • t.remove(ta)
  • t.remove(tb)
  • t.append(n)
  • self.expressions.append(expression)
  • ok = True
  • return t
  • def help():
  • print "usage :"
  • print ""
  • print " n pour un nouveau tirage"
  • print " s pour une solution (celle qui a engendré le but)"
  • print " h pour cette aide (help)"
  • print ""
  • print " calculs successifs de la forme 'nombre opérateur nombre' puis valider"
  • print ""
  • print "Opérateurs disponibles : %s" % OPS
  • print ""
  • ############
  • # main
  • ############
  • if __name__ == "__main__":
  • help()
  • onBoucle = True
  • c = CompteBon()
  • while onBoucle:
  • c.generer()
  • c.resoudre()
  • r = raw_input("On continue (O/n) ? ")
  • onBoucle = not(r == "n" or r == "N")
#!/usr/bin/env python
# -*- coding: UTF-8 -*-

__author__ = u"André Connes <andre.connes at wanadoo.fr>"
__version__ = "10.02.12" # cad 12 février 2010
__copyright__ = "GPL le terrier <AbulEdu.org> "

# Usage : python compteBon.py
#   une aide initiale (succinte) indique ce qu'il faut faire.
# Cette classe génére une liste de nombres, un but et contrôle les réponses d'un
#   utilisateur (élève du primaire).
#   Cette classe sera utilisée dans une version graphique en préparation sous pygame


from random import randint
# from config import MIN, MAX, AUCHOIX, OPS
# ATTENTION : bien adapter MIN, MAX, AUCHOIX et OPS
MIN = 567	# but > MIN
MAX = 5678	# but < MAX
AUCHOIX = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 25, 50, 75, 100]
OPS = ["+", "-", "*", "/"]
#MIN = 234	# but > MIN
#MAX = 999	# but < MAX
#AUCHOIX = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 25, 50, 75, 100]
#OPS = ["+", "-", "*"]

class CompteBon:
	
	# le constructeur
	def __init__(self):
		self.tirage = []		# le tirage a lieu dans cette liste, sans doublon
		self.but = 0			# le nombre à trouver
		self.expressions = []	# calculs successifs générés pour définir le but

	# générer tirage, but et expressions
	def generer(self):		
		while 1:
			self.auChoix = AUCHOIX[:]
			self.tirage, self.but, self.expressions = [], 0, []			
			self._tirage()
			t = self._sous_tirage()
			while len(t) != 1:
				self._utiliser2nombres(t)	# calculs réalisés : met-à-jour expressions et t
			if MIN <= t[0] < MAX: break 
		self.but = t[0]

	# contrôler les réponses de l'élève-utilisateur		
	def resoudre(self):
		nombres = self.tirage[:]
		print "** ** ** ** ** But = %s ** ** ** ** **" % self.but

		while 1:
			print "Nombres à utiliser : %s" % nombres	
			try:
				ne = raw_input("    nouveau calcul : ")
				if ne == "n": break
				if ne == "h": help(); continue
				if ne == "s": print self.expressions; continue
				if   ne.find("+") >= 0: s = ne.split("+")
				elif ne.find("-") >= 0: s = ne.split("-")
				elif ne.find("*") >= 0: s = ne.split("*")
				elif ne.find("/") >= 0: s = ne.split("/")						
				m = map(int, s)
			except:
				print u"aîe, 'entier op entier' attendu"
				continue
		
			if not ((m[0] in nombres) and (m[1] in nombres)):
				print "Nombres dans la liste attendus"
				continue 
			 
			nombres.remove(m[0])
			nombres.remove(m[1])
			nombres.append(eval(ne))
	
			if self.but in nombres:
				print "Bravo, %s atteint !\n" % self.but
				break
			if len(nombres) == 1:
				print "Hélàs, c'est faux. Voici une solution : %s\n" % self.expressions
				break	
		
	#
	# méthodes protégées
	#
		
	# créer la liste 'tirage' des nombres à utiliser, sans doublon
	def _tirage(self):
		p = randint(6, 8)		# nombre de nombres proposés		
		for i in xrange(p):
			a = randint(0, len(self.auChoix)-1)	# tirage de l'index d'un nombre
			t = self.auChoix[a]					# valeur du tirage
			self.auChoix.remove(t)				# pour éviter les doublons
			self.tirage.append(t)				# un tirage de plus
		self.tirage.sort()	

	# sous_tirage pour générer le but (tous les nombres de cette liste seront utilisés)
	def _sous_tirage(self):
		t = self.tirage[:]
		for i in xrange(randint(1,3)):
			a = t[randint(0,len(t)-1)]
			t.remove(a)
		return t

	# choix d'une opération	
	def _op(self):
		n = randint(0,len(OPS)-1)
		return OPS[n]
		
	# vérifier que le calcul proposé est satisfisant (positif et entier)
	def _verification(self, n, op, ta, tb):
		if n <= 0: return False
		if op == "*": return (ta != 1) and (tb != 1)
		if op == "/":
			if tb == 1: return False
			else: return ta == tb * n
		return True

	# choisir 2 nombres du sous_tirage, effectuer le calcul
	def _utiliser2nombres(self,t):
		ok = False
		while not ok:
			op = self._op()
			a, b = 0, 0
			while a == b:
				a, b = randint(0, len(t)-1), randint(0, len(t)-1)
			ta, tb = t[a], t[b]				
			expression = str(ta)+op+str(tb)
			try:
				n = eval(expression)
			except:
				continue
			if self._verification(n, op, ta, tb):
				#print expression				
				t.remove(ta)
				t.remove(tb)
				t.append(n) 
				self.expressions.append(expression)
				ok = True
		return t		
	
def help():
	print "usage :"
	print ""
	print "  n pour un nouveau tirage"
	print "  s pour une solution (celle qui a engendré le but)"
	print "  h pour cette aide (help)"
	print ""
	print "  calculs successifs de la forme 'nombre opérateur nombre' puis valider"
	print ""
	print "Opérateurs disponibles : %s" % OPS
	print ""

############
# main
############
		
if __name__ == "__main__":
	
	help()
	onBoucle = True

	c = CompteBon()
	while onBoucle:	
		c.generer()
		c.resoudre()
		r = raw_input("On continue (O/n) ? ")
		onBoucle = not(r == "n" or r == "N")



 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip GÉNÉRER DE NOUVEAUX SUDOKU AVEC LEURS SOLUTIONS
CS2PY (FROM CODESOURCE TO PYTHON)

 Sources de la même categorie

Source avec Zip Source avec une capture CASSE BRIQUE par elnabo
Source avec Zip Source avec une capture JEU DU SERPENT ////\\\\ SNAKE par elnabo
Source avec Zip Source avec une capture LES CONTES DE MONTE CRYPTO par amaury74
Source avec Zip Source avec une capture UN CLASSIC SOKOBAN par blackgrimly
Source avec Zip Source avec une capture LE COMPTE EST BON par PythonLin

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture I.A. (DÉBUTANT) par Rano Its
CLASSES POUR LA CONVERSION DE BASE par veracruz

Commentaires et avis

Aucun commentaire pour le moment.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Définir une liste de string [ par Mr.X ] Mon problème est que dans ma classe une fonction execute une instruction du type : self.lst[i] = bufferet python me renvoi que self.lst n'est pas défi Déplacer méthode [ par Roro8883 ] Bonjour à tous !Je suis débutant sous python, mais je connais assez bien le C++.J'aimerais pouvoir déplacer mes méthodes (fonctions) contenues dans me classe abstraite [ par oxkao ] bonjours,voili voilou je me suis mis à python et je pensais (en tant que langage objet) retrouver les mêmes principe qu'en C++ ou java je cherche donc


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Juillet 2010
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,593 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales