Forum de mathématiques - Bibm@th.net
Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#1 27-09-2011 11:17:01
- karlun
- Membre
- Inscription : 05-05-2010
- Messages : 216
Exercice (Python) sur énigme voisins-voisines.
Bonjour,
J'ai choisi de créer cette nouvelle discussion car j'ai peur qu'on pense que je souhaite m'immiscer dans la discussion (un peu trop ardue pour moi) « Voisins, voisines, (code sur énigme de Freddy) »;
A partir de l'énoncé que Freddy a soumis à notre réflexion, en guise d'exercice, je propose le petit code suivant (qui me trottait dans la tête) qui rend compte que le hasard du choix des paires à répartir n'influe pas sur le nombre de tirages total.
Voici l’énoncé rappelé:
« Vingt et une personnes, dont Paul et Virginie, du club Med' de Peysey Nancroix, sont assises autour d'une table circulaire pour participer à un jeu "step by step".
Une étape consiste à choisir au hasard une personne qui a au moins deux coquillages ; celle-ci doit alors donner un coquillage à chacun de ses deux voisins (voisines).
Au départ du jeu, une personne a 20 coquillages, les autres n'ont rien.
A l'issue de 384 étapes, Virginie a deux coquillages de plus que Paul.
Combien ont ils respectivement ? »
(La réponse dépendra si Paul et Virginie sont voisins (on le pense bien) ou pas.)
Voici:
# usr/bin/env python
# -*- coding: cp1252 -*-
from __future__ import division
from math import*
from time import time
import random
voisin,n=[0]*21,0
#crée une liste de 21*0 et initialise n (nombre d'étapes)
p = random.randint(0,20)
#génere une p personne(aléatoire)recevant 20 coquillages
voisin[p]=20
print "étape n°",n,":",voisin
while max(voisin)>1:
#tant qu'une personne possède plus d'1 coquillage on continue.
n+=1
#compteur d'étape
r = random.randint(0,20)
#génere une r position(aléatoire)parmis les 21.
while voisin[r]<2:
#tant que le voisin occupant la position r n'a pas au moins
#2 coquillages, on recommence le tirage.
r = random.randint(0,20)
voisin[r]-=2
#le voisin r possédant au moins 2 coquillages en donne 1 à ses voisins.
voisin[r-1]+=1
#le voisin de gauche reçois 1 coquillage.
if r+1>20:
#astuce pour rendre voisin la 21° personne avec la première (si besoin).
r-=20
#(bouclage du cercle rendant le tirage au sort initial de la personne recevant
voisin[r]+=1
#les 20 coquilages inutile; mais bon!)
else:
voisin[r+1]+=1
#le voisin de droite reçois 1 coquillage.
print "étape n°",n,":",voisin
#résultat de l'opération
Peut-être peut-on encore le condenser?
A+-*/
PS: Merci pour vos conseils #2 #3.
Moyennant une dédentation sur l'ensemble d'un copier-coller ça fonctionne (chez moi)
Dernière modification par karlun (27-09-2011 12:56:33)
Qui trouve, cherche.
Hors ligne
#2 27-09-2011 12:14:57
- totomm
- Membre
- Inscription : 25-08-2011
- Messages : 1 093
Re : Exercice (Python) sur énigme voisins-voisines.
Bonjour,
j'ai essayé votre code : il faut import random en tête
ensuite il ne s'arrête pas à cause de l'imbrication d'un 2ème while dans le premier
Je vous suggère de mettre votre version de Python en commentaire en-tête de votre code
et de mettre la balise "code=Python" et non simplement la balise code pour avoir la couleur.
Sauf erreurs de ma part.
cordialement
Hors ligne
#3 27-09-2011 12:29:49
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 16 944
Re : Exercice (Python) sur énigme voisins-voisines.
Salut karlun,
Ça fait une paie...
Non, pas de problème, je t'engage à ajouter ton code dans la discussion qui est consacrée à ce sujet : tous ces codes sont les bienvenus, pas de problème d'immixtion...
Bon ton code me semble incomplet, non ?
1. J'ai revu l'indentation l'indentation des lignes 2-3-4-5 par ex devraient être nulle, non (alignées avec ligne 1)
2. J'ai ajouté en en-tête "import random" sinon j'ai un message d'erreur
3. Il m'affiche la liste voisin avec ses 21 zéros et depuis j'attends... Ce n'est pas normal (pas dans tes habitudes).
Un conseil : les retours à la ligne des commentaires mettent le bazar : donc commence sur une ligne vide et si tu vas au delà du 79e caractère, coupe, va à la ligne et écris une suite du commentaire...
Condenser ton code ? Il est déjà bien serré, non ?
On verra ça (pas grand espoir), quand je saurais ce qui cloche dans mon adaptation...
@+
[EDIT]
Encore une fois trop bavard.
totomm m'a devancé.
(...) et de mettre la balise "code=Python" et non simplement la balise code pour avoir la couleur
Pas d'erreur sauf que la colorisation ne me convient pas, elle n'est pas satisfaisante.
Mais, ce problème est sur ma liste des choses à faire : je dispose (en théorie) des infos nécessaires et du fichier qui commande la couleur que m'a envoyé Fred : je vais avoir le temps de me pencher sur le correctif à apporter maintenant que mariage et déménagement sont passés...
Serais-je capable de faire les modifs ? Ça, comme aurait dit Kipling, c'est une autre histoire....
[EDIT2]karlun
je viens de faire un copier/coller dans Python et j'ai lancé le programme : il plante...
Message d'erreur :
Syntax error.
there's an error in your program : unexpected indent
Et le curseur est placé devant voisin, ligne 7.
Désolé, tovarich
[EDIT 3] Indenntations toutes corrigées : ça marche !
Bizarre un copier/coller devrait suffire...
Peut-être est-ce la faute de chrome (FF merde sérieusement chez moi avec BibMath, donc j'utilise Chrome pour bibmath).
[EDIT4]C'est un peu Chrome et beaucoup la balise code...
Avec FF, après copier/coller l'indentation n'est pas fantaisiste comme dans Chrome, mais tout est décalé de 4 caractères vers la droite : c'est la place occupée avant par la numérotation (même si elle n'apparaît plus) qui met le bazar.
Je transmets à Fred.
Affaire à suivre...
Dernière modification par yoshi (27-09-2011 12:57:33)
Arx Tarpeia Capitoli proxima...
Hors ligne
#4 27-09-2011 18:35:19
- totomm
- Membre
- Inscription : 25-08-2011
- Messages : 1 093
Re : Exercice (Python) sur énigme voisins-voisines.
Bonsoir,
C'est du Python 2.7, mais qui est OK sous Python 3.2 si on ajoute les parenthèses aux print()
Inutile de tirer au sort le placement des 20 coquillages du début : toutes les positions étant équivalentes, il suffit de les placer en position 10 (ligne 11 voisin[10]=20)
On voit aussi que la position du 0 final est toujours celle des 20 initiaux et que le bouclage en cercle est inutile
mais voir les démonstrations dans l'énigme "voisins voisines" en laissant de coté ce qui serait trop difficile.
et n'hésitez pas à poser des questions de compréhension...
Cordialement
@yoshi : Je ne faisais pas la course, surtout que je me suis référé à votre code pour voir ce qui clochait :-)
En plus j'ai dit une bétise sur l'imbrication des while !
Hors ligne
#5 27-09-2011 20:14:54
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 16 944
Re : Exercice (Python) sur énigme voisins-voisines.
RE,
Je ne faisais pas la course,
Quelle course ? Où ça ? Quand ça ?
Je n'ai rien vu, : trop occupé à comprendre pourquoi l'indentation clochait après copier/coller !
Maintenant, je sais...
Fred va sûrement trouver et moi je vais devoir mettre le nez dans le fichier de configuration des couleurs et ça, ça ne va pas être du gâteau...
Karlun nous la joue à la nerosson : il se dévalorise.
Dans mes souvenirs, question programmation, il tenait la route !
Alors, si on est 3, 3 styles différents dans le forum programmation, c'est bien...
Je me suis fait longtemps l'effet d'être Saint Simon prêchant dans le désert !
Sur tout ce que j'ai publié, jamais un retour : ce n'était pas très encourageant...
@+
Arx Tarpeia Capitoli proxima...
Hors ligne