IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

fonction qui ne se lance pas toute seule et qui cesse de fonctionner après le choix de la variables


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2022
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2022
    Messages : 4
    Par défaut fonction qui ne se lance pas toute seule et qui cesse de fonctionner après le choix de la variables
    Bonjour, j'ai codé le problème mathématique de monty hall, et l'interface ne semble pas trouver d'erreur dans mon programme. Seulement, tout d'abord, il me faut écrit le nom du programme dans l'interface d'exécution pour qu'il veuille bien commencer et en plus, lorsque je le lance, la fonction qui représente la totalité du programme s'arrête à la partie "input", de laquelle sont tirés les données nécessaires à l'exécution de la suite du programme. Autrement dit, le programme me demande d'entrer une valeur puis n'en fait rien alors qu'il le devrait. Merci de m'aider.
    Images attachées Images attachées    

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 767
    Par défaut
    Salut,

    Citation Envoyé par speedman12 Voir le message
    Autrement dit, le programme me demande d'entrer une valeur puis n'en fait rien alors qu'il le devrait
    Si vous postez du code apprenez à utiliser la balise CODE (ou le # dans l'éditeur) plutôt que d'en poster une image.
    Ajoutez un print (choix_joueur) après la saisie (choix_joueur = input(....)) et comparez la valeur affichée a celles de vos variables a, b, c...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 925
    Billets dans le blog
    8
    Par défaut
    Bonjour,
    La sortie d'une input() est de type str et tes variables a, b, c sont des int. C'est pourquoi tes tests if ne sont jamais vrais.
    ...
    Par ailleurs, ton random.choice() va te renvoyer une exception ...

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2022
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2022
    Messages : 4
    Par défaut Remerciements et nouvelle question
    Citation Envoyé par Hominidé Voir le message
    Bonjour,
    La sortie d'une input() est de type str et tes variables a, b, c sont des int. C'est pourquoi tes tests if ne sont jamais vrais.
    ...
    Par ailleurs, ton random.choice() va te renvoyer une exception ...
    Merci beaucoup, je débute encore et je crois bien que tu m'as fait franchir une grosse étape. Néanmoins pourrais tu développer un peu plus sur les exceptions ? le programme marche parfaitement au détail près que la fonction random crèe une sorte de boucle qui fait que la partie de mon programme concernée est jouée deux fois avant que la suite soit jouée.

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 845
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 845
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par speedman12 Voir le message
    Néanmoins pourrais tu développer un peu plus sur les exceptions ?
    Une exception est un évènement qui se produit quand Python est incapable d'exécuter une instruction. Exemple une fonction qui reçoit n et renvoie 1/n à laquelle on lui passe 0. Python se trouve alors en échec et fait remonter cet échec à toute la pile des instructions qui ont amené cet échec pour finir par quitter le programme.
    Dans le cas mentionné par Hominidé, la fonction choice() veut un seul paramètre et toi tu lui en passes deux...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 925
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    la fonction choice() veut un seul paramètre et toi tu lui en passes deux...
    Illustration:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> import random
    >>> random.choice(1, 2)
    Traceback (most recent call last):
      File "/usr/lib/python3.8/idlelib/run.py", line 559, in runcode
        exec(code, self.locals)
      File "<pyshell#6>", line 1, in <module>
    TypeError: choice() takes 2 positional arguments but 3 were given
    >>>
    L'interprétateur nous annonce une erreur de TypeError.
    Dans ce cas l'exception rencontrée ne sera pas comprise par un débutant n'ayant pas étudié les classes, car il ne comprendra pas pourquoi l'interprétateur lui dit que 3 arguments a été transmis à choice alors qu'on ne lui en a précisé que deux (une personne qui a connaissance de comment s'organise une classe comprendra que le 3 élément dont il est fait mention correspond au self), mais il comprendra qu'il y a un souci avec les arguments transmis.

    Effectivement, on peut voir que choise attend une séquence (== un élément indexable comme les list, tupples, string):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> help(random.choice)
    Help on method choice in module random:
     
    choice(seq) method of random.Random instance
        Choose a random element from a non-empty sequence.
    Ceci sera donc correct:

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 845
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 845
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par speedman12 Voir le message
    j'ai codé le problème mathématique de monty hall
    Oui, de façon bien maladroite. Des répétitions en cascade, trois variables pour trois choses identiques (à savoir trois portes) ce qui alors se code par l'utilisation d'un tableau qui permet de factoriser les traitements. Plus un test sur a, un test sur b et un test sur c. En opposition à quoi ce dernier test? Au fait qu'il aurait pu choisir d ??? Idem pour le second tour où il peut choisir 1 ou 2 et où tu testes s'il a choisi 1 sinon tu regardes s'il a choisi 2 (sait-on jamais, des fois qu'il aurait choisi 3...).
    Accessoirement les 3 variables a, b et c représentENT les différentes portes vu qu'elles sont plusieurs à les représenter. De plus "mourir" ne prend qu'un "r", et quand une porte "fût choisie" alors on accord le participe passé au sujet (la porte). Et ce serait peut-être à toi de revoir tes probas ma petite car tu dénigres le joueur qui change son choix et qui perd alors que justement il a bien joué les probas puisque changer son choix est la décision qui offre les meilleures chances de gagner.

    Coder Monty Hall c'est surtout faire des millions d'essais et compter combien de fois on gagne quand on ne change pas vs combien de fois on gagne quand on change ; pour montrer statistiquement que le joueur a plutôt avantage à changer son choix (axiome de base, toujours profiter d'une information qui nous est donnée, information qui est la porte ouverte par le présentateur). Parce que là, tu vas lancer ton truc 3 fois et tu verras que c'est totalement sans intérêt vu que tu connais la bonne porte...

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    #!/usr/bin/env python3
    # coding: utf-8
     
    import random
     
    def monty_hall(n, *, change, debug=False):
    	gain=0
    	for i in range(n):
    		# La porte gagnante est choisie
    		porte=random.choice("abc")
     
    		# La porte jouée est choisie
    		jeu=random.choice("abc")
     
    		# Si changement
    		if change:
    			# On mémorise la porte jouée car elle va changer
    			mem=jeu
     
    			# Si la porte gagnante n'a pas été choisie
    			if porte != jeu:
    				# La porte rejouée est obligatoirement gagnante
    				jeu=porte
    			else:
    				# La porte rejouée perd obligatoirement (on en prend donc une autre au pif)
    				jeu=random.choice(tuple(set("abc") - set(porte)))
    			# if
    		# if
     
    		# Si la porte gagnante a été choisie
    		if porte == jeu:
    			# Le gain augmente
    			gain+=1
     
    		# En mode debug
    		if debug:
    			print(
    				"Essai n° {0}/{1} - {2}, porte gagnante {3} ({4}): gain {5}".format(
    					i+1,
    					n,
    					"Premier choix {0}, second choix {1}".format(mem, jeu)\
    					if change else "Choix unique {0}".format(jeu),
    					porte,
    					"gagné" if porte == jeu else "perdu",
    					gain,
    				)
    			)
    		# if
    	# for
     
    	# On retourne le gain (finalement c'est la seule chose qui importe)
    	return gain
    # monty_hall()
     
    if __name__ == "__main__":
    	random.seed()
    	n=1_000_000
    	debug=False
     
    	g=monty_hall(n, change=True, debug=debug)
    	print("Avec changement: %d tirages, %d gains, ratio %.02f%%" % (n, g, g*100 / n))
     
    	g=monty_hall(n, change=False, debug=debug)
    	print("Sans changement: %d tirages, %d gains, ratio %.02f%%" % (n, g, g*100 / n))
    # if
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2022
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2022
    Messages : 4
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Bonjour

    Oui, de façon bien maladroite. Des répétitions en cascade, trois variables pour trois choses identiques (à savoir trois portes) ce qui alors se code par l'utilisation d'un tableau qui permet de factoriser les traitements. Plus un test sur a, un test sur b et un test sur c. En opposition à quoi ce dernier test? Au fait qu'il aurait pu choisir d ??? Idem pour le second tour où il peut choisir 1 ou 2 et où tu testes s'il a choisi 1 sinon tu regardes s'il a choisi 2 (sait-on jamais, des fois qu'il aurait choisi 3...).
    Accessoirement les 3 variables a, b et c représentENT les différentes portes vu qu'elles sont plusieurs à les représenter. De plus "mourir" ne prend qu'un "r", et quand une porte "fût choisie" alors on accord le participe passé au sujet (la porte). Et ce serait peut-être à toi de revoir tes probas ma petite car tu dénigres le joueur qui change son choix et qui perd alors que justement il a bien joué les probas puisque changer son choix est la décision qui offre les meilleures chances de gagner.

    Coder Monty Hall c'est surtout faire des millions d'essais et compter combien de fois on gagne quand on ne change pas vs combien de fois on gagne quand on change ; pour montrer statistiquement que le joueur a plutôt avantage à changer son choix (axiome de base, toujours profiter d'une information qui nous est donnée, information qui est la porte ouverte par le présentateur). Parce que là, tu vas lancer ton truc 3 fois et tu verras que c'est totalement sans intérêt vu que tu connais la bonne porte...

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    #!/usr/bin/env python3
    # coding: utf-8
     
    import random
     
    def monty_hall(n, *, change, debug=False):
    	gain=0
    	for i in range(n):
    		# La porte gagnante est choisie
    		porte=random.choice("abc")
     
    		# La porte jouée est choisie
    		jeu=random.choice("abc")
     
    		# Si changement
    		if change:
    			# On mémorise la porte jouée car elle va changer
    			mem=jeu
     
    			# Si la porte gagnante n'a pas été choisie
    			if porte != jeu:
    				# La porte rejouée est obligatoirement gagnante
    				jeu=porte
    			else:
    				# La porte rejouée perd obligatoirement (on en prend donc une autre au pif)
    				jeu=random.choice(tuple(set("abc") - set(porte)))
    			# if
    		# if
     
    		# Si la porte gagnante a été choisie
    		if porte == jeu:
    			# Le gain augmente
    			gain+=1
     
    		# En mode debug
    		if debug:
    			print(
    				"Essai n° {0}/{1} - {2}, porte gagnante {3} ({4}): gain {5}".format(
    					i+1,
    					n,
    					"Premier choix {0}, second choix {1}".format(mem, jeu)\
    					if change else "Choix unique {0}".format(jeu),
    					porte,
    					"gagné" if porte == jeu else "perdu",
    					gain,
    				)
    			)
    		# if
    	# for
     
    	# On retourne le gain (finalement c'est la seule chose qui importe)
    	return gain
    # monty_hall()
     
    if __name__ == "__main__":
    	random.seed()
    	n=1_000_000
    	debug=False
     
    	g=monty_hall(n, change=True, debug=debug)
    	print("Avec changement: %d tirages, %d gains, ratio %.02f%%" % (n, g, g*100 / n))
     
    	g=monty_hall(n, change=False, debug=debug)
    	print("Sans changement: %d tirages, %d gains, ratio %.02f%%" % (n, g, g*100 / n))
    # if
    Pour ce qui concerne le dernier paragraphe, je sais bien. Je comptais après rajouter une instruction pour tester la loi des grands nombres sur le problème et démontrer que c'est bien en jouant deux fois qu'on a le plus de chance. Mais, j'admets que conseiller à un joueur qui a joué deux fois de revoir ses probas est une contradiction, je vais changer la phrase en conservant le même style. Merci!

Discussions similaires

  1. Selection date DTPicker2 lance Userform_Activate tout seul?
    Par jojo86 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 13/02/2018, 10h27
  2. Autoexec ne se lance pas tout le temps
    Par bdf94 dans le forum Macros Access
    Réponses: 12
    Dernier message: 27/09/2013, 07h17
  3. ma fonction ne se la lance pas - onsubmit
    Par exe2bin dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 02/10/2012, 22h07
  4. Fonctions Jquery ne se lance pas sous Chrome
    Par akrogames dans le forum jQuery
    Réponses: 0
    Dernier message: 18/04/2011, 18h23
  5. La fonction appelée ne se lance pas (objet requis)
    Par beegees dans le forum Général JavaScript
    Réponses: 19
    Dernier message: 14/09/2006, 11h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo