Bonjour,
j'aimerai savoir si c'est possible de reprendre le résultat de ma def identification et de l'envoyer dans la def presentation .
Exemple:
Dans le terminal y'a ca qui apparait ''Bienvenue <function identification at 0x03DFF348> le but du 421 est de lancé 3 dés est de tomber sur un 1, un 4 et un 2''
def identification():
print('nom ? ')
return input()
def presentation():
print('Bienvenue ' ,end='')
print(identification ,end='')
return print(' le but du 421 est de lancé 3 dés est de tomber sur un 1, un 4 et un 2 ')
Si j'ai mal expliquer je suis désolé faites le moi savoir j'essayerai de réexpliquer autrement
MERCI .
Merci mais j'avais déjà essayé et ce n'est pas le résultat que j'attends car si je fait ca je devrai écrire deux fois le nom du joueur.
En gros quand je rentre c'est deux def j'aimerai que identification() me permet d'écrire le nom et que presentation() le reprenne sans le réécrire une seconde fois
Merci pour la rectification dans def identification().
Mais pour presentation le probleme est toujours la
il me demande deux fois le nom du joueur alors que je voudrai qu'il reprend le resultat d'avant .
Bien sûr !
il ne faut pas appeler identification
Il faut juste appeler présentation
Car présentation appelle elle même identification
def identification():
nom = input('nom ? ')
return(nom)
def presentation():
print('\nBienvenue ! ' ,end='')
identification()
print('le but du 421 est de lancer 3 dés et de sortir 4, 2, et 1 ')
presentation()
Désolé j'avais oublier le 'de()' oui ca rapporte bien à un lance de dé que j'ai fait plus haut . Aussi j'ai essayé d'écrire de la deuxième manière les if mais ca change pas.
Quand je lance le programme étape par étape je peux voir que le problème c'est la fonction affiche_lancer que récupère la fonction affiche résultat est un none donc none n'est pas égale a (1,2,3) ou (1,4,2) .. . . donc m'affiche dommage .
Pour moi c'est parce que la fonction affiche_lance ne renvoie rien dû au manque d'un return
from random import randint
def de():
return randint(1,6)
print (de())
def est_un_421(de1,de2,de3):
"""
Renvoie vrai si et seulement si deux dés forment un 42
Paramètres :
- de1 : entier - un lancer de dé six
- de2 : entier - un 2eme lancer de dé six
- de3 : entier - un 3eme lancer de dé six
Valeur de retour : booléen
Contraintes : de1, de2 et de3 appartiennent à [1, 6]
:Exemples:
>>> est_un_421(4, 2, 1)
True
>>> est_un_421(2, 4, 1)
True
>>> est_un_421(1, 2, 4)
True
>>> est_un_421(2, 1, 4)
True
>>> est_un_421(4, 0, 6)
False
>>> est_un_421(5, 1, 4)
False
"""
if (de1 == 4 or de1==2 or de1==1) :
if (de2==4 or de2==2 or de2==1) and de2 !=de1:
if (de3== 4 or de3==2 or de3==1 ) and (de3!=de2) and (de3!=de1):
return True
else :
return False
else :
return False
else :
return False
print(est_un_421(randint(1,6),randint(1,6),randint(1,6)))
## interaction avec l'utilisateur
def identification():
nom = input('nom ? ')
return (nom)
def presentation():
print('\nBienvenue ! ' ,end='')
identification()
print(' le but du 421 est de lancé 3 dés et de sortir 4,2, et 1 ')
def poursuivre_le_jeu():
"""
Renvoie vrai si et seulement si le joueur ecrit oui ou yes
Valeur de retour : booléen
Contrainte: accepter seulement oui, yes, non, no
:Exemples:
>>> poursuivre_le_jeu(oui)
True
>>> poursuivre_le_jeu(non)
False
>>> poursuivre_le_jeu(frfe)
False
"""
print('Voulez-vous jouer au jeu du 421?')
if 'oui' or 'yes' :
return True
elif 'non' or 'no':
return False
##Affichage sur le terminal
def affiche_lancer(a,b,c):
print('+---+ ' , end='')
print('+---+ ' , end='')
print('+---+')
print('| ' , end='')
print(a , end='')
print(' | ' , end='')
print('| ' , end='')
print(b , end='')
print(' | ' , end='')
print('| ' , end='')
print(c , end='')
print(' | ')
print('+---+ ' , end='')
print('+---+ ' , end='')
print('+---+')
def affiche_resultat():
if affiche_lancer()==((1,2,4) or (1,4,2) or (2,1,4) or (2,4,1) or (4,1,2) or (4,2,1)):
print('bien joué')
else: #Programme non fonctionnel
print('dommage') #j'ai pas reussi à reprendre les mêmes paramètres que la fonction precedente
return
##One Main to rule them all
def main_421():
presentation()
poursuivre_le_jeu()
affiche_lancer(de(),de(),de())
affiche_resultat()
main_421()
En fait, ton code de 421 peut s'écrire très simplement:
import random
print('\n ***** Jeu de 421 *****\n')
nom = input('Bienvenue, quel est ton nom ? : ')
input('{} appuie sur entrée pour lancer les dés ...'.format(nom))
des = [n for n in range(1,7)]
lancer = random.sample(des, 3)
lancer.sort()
print('\nRésultat : {}'.format(lancer))
if(lancer == [1,2,4]):
print('Gagné !')
else:
print('Perdu !')
Fais-en un copié/collé et essaie, tu verra, ca marche super bien
Ceci dit, il y a une chance sur 36 de sortir un 421 ...
Enfaite c'est plusieurs exercice que tu peux voir ou j'ai mis les # pour a la fin les assemblés dans main_421().
Donc je peux pas prendre un programmme direct et aussi le format() j'ai pas encore vu à quoi ca servait .
Mais merci pour ton aide .
input('{} appuie sur entrée pour lancer les dés ...'.format(nom))
avec cet input, le programme attend que tu appuie sur 'entrée' pour continuer, donc tu appuie et
il continue à la ligne suivante:
des = [n for n in range(1,7)] #crée une liste de 6 chiffres
lancer = random.sample(des, 3) # crée une liste de 3 chiffre tirés au hasard parmi les 6
lancer.sort() # trie la liste de 3 chiffres en ordre croissant : 4,2,6 devient 2,4,6
print('\nRésultat : {}'.format(lancer))
imprime la liste des 3 chiffres
if(lancer == [1,2,4]):
: il suffit de tester si la liste est égale à 1,2,4
Ok si j'ai compris ton lancé de dé tu l'a affecté à la variable 'lancer' puis après tu regarde si lancer est égale à 1,2,4 .
Mais moi comme c'est des def différente il ne c'est pas a quoi est associer lancer
def affiche_lancer(a,b,c):
print('+---+ ' , end='')
.............
print('+---+')
lancer = a,b,c
return lancer
def affiche_resultat():
if (lancer==[1,2,4]):
print('bien joué')
else: #Programme non fonctionnel
print('dommage') #j'ai pas reussi à reprendre les mêmes paramètres que la fonction precedente
return
Du coup j'ai essayé ca mais même problème affiche_lancer le prend comme une fonction et pas le resultat donc affiche toujours dommage ( pour le tri je le met de coté pour l'instant .
def affiche_lancer(a,b,c):
print('+---+ ' , end='')
..............
print('+---+')
return a,b,c
def affiche_resultat():
lancer = affiche_lancer
if (lancer==[1,2,4] or lancer==[1,4,2] or lancer==[2,1,4] or lancer==[2,4,1] or lancer==[4,2,1] or lancer==[4,1,2]):
print('bien joué')
else: #Programme non fonctionnel
print('dommage') #j'ai pas reussi à reprendre les mêmes paramètres que la fonction precedente
return
affiche_lancer attend des arguments, et pour un return dans le format attendu, il faut le formater
pour debugger du code, il faut rajouter des print, parfois derrière chaque ligne pour voir ce qui se passe
def affiche_lancer(a,b,c):
print('+---+ ' , end='')
print('+---+')
return [a,b,c]
def affiche_resultat():
lancer = affiche_lancer(a,b,c)
print(lancer)
if (lancer==[1,2,4] or lancer==[1,4,2] or lancer==[2,1,4] or lancer==[2,4,1] or lancer==[4,2,1] or lancer==[4,1,2]):
print('bien joué')
else: #Programme non fonctionnel
print('dommage') #j'ai pas reussi à reprendre les mêmes paramètres que la fonction precedente
return
Et si ce sont des variables globales connues avant, pas besoin de les passer en argument
def affiche_lancer():
print('+---+ ' , end='')
print('+---+')
return [a,b,c]
def affiche_resultat():
lancer = affiche_lancer()
print(lancer)
if (lancer==[1,2,4] or lancer==[1,4,2] or lancer==[2,1,4] or lancer==[2,4,1] or lancer==[4,2,1] or lancer==[4,1,2]):
print('bien joué')
else: #Programme non fonctionnel
print('dommage') #j'ai pas reussi à reprendre les mêmes paramètres que la fonction precedente
return
def affiche_lancer(a,b,c):
print('+---+ ' , end='')
.............
print('+---+')
return [a,b,c]
def affiche_resultat():
lancer = affiche_lancer(a,b,c)
print(lancer)
if (lancer==[1,2,4] or lancer==[1,4,2] or lancer==[2,1,4] or lancer==[2,4,1] or lancer==[4,2,1] or lancer==[4,1,2]):
print('bien joué')
else: #Programme non fonctionnel
print('dommage') #j'ai pas reussi à reprendre les mêmes paramètres que la fonction precedente
return
##One Main to rule them all
def main_421():
presentation()
poursuivre_le_jeu()
affiche_lancer(de(),de(),de())
affiche_resultat()
main_421()
Enfaite les arguments sont donnés après et quand je met entre parenthèse a b c la console dit que a n'est pas défini (que je trouve normale car j'ai pas mis de parametre au debut de la def
Surement enfaite affiche_lancer c'est pour afficher le lancer dans la console et affiche_resultat reprendre le resultat de affiche_lancer et dire si c'est bon ou pas .
Merci pour le lien je le lirai (je suis censé avoir des cours d'info met 3 mois que j'ai pas vue le prof à cause du confinement
ok je viens d'essayer effectivement en enlevant Affiche_lancer du def de fin j'ai reussi
def affiche_lancer(a,b,c):
print('+---+ ' , end='')
print('+---+')
return [a,b,c]
def affiche_resultat():
lancer = affiche_lancer(de(),de(),de())
print(lancer)
if (lancer==[1,2,4] or lancer==[1,4,2] or lancer==[2,1,4] or lancer==[2,4,1] or lancer==[4,2,1] or lancer==[4,1,2]):
print('bien joué')
else: #Programme non fonctionnel
print('dommage') #j'ai pas reussi à reprendre les mêmes paramètres que la fonction precedente
return
##One Main to rule them all
def main_421():
presentation()
poursuivre_le_jeu()
affiche_resultat()
Tu devrais nous mettre l'ensemble de ton code. Et de l'énoncé. Car je pense que si on demande le nom du joueur c'est pour le réutiliser plus tard comme dans 'bien joué xxx'
Et ton poursuivre_le_jeu(), il devrait y avoir un input, et en fin dans le main, une boucle qui utilise le True/false pour relancer les dés plusieurs fois de suite.
Jeu du ‘421’
L’objectif est de réaliser une version très simplifiée du ‘421’ consistant en un seul lancer de 3 dés 6 mais permettant une interaction avec l’utilisateur via le terminal.
Vous pourrez réutiliser des fonctions déjà écrites précédemment.
Commencez par créer un répertoire mini_jeux dans lequel vous sauvegarderez un script quatre_deux_un.py que vous allez compléter.
À la fin de ce script, définissez une fonction principale main_421() qui sera le point d’entrée du programme.
Les fonctions ci-après permettent de décomposer ce programme en fonctions plus simples, indépendantes les unes des autres et qui seront toutes utilisées dans cette fonction principale.
Fonctions propres au jeu du ‘421’
Définissez une fonction de() sans paramètre simulant le lancer d’un dé à 6 faces.
Définissez un prédicat est_un_421 acceptant 3 paramètres correspondant aux valeurs de chacun des dés et testant si ces valeurs forment un triplet 421 (dans n’importe quel ordre).
Interaction avec l’utilisateur
Il s’agit maintenant d’ajouter quelques fonctions permettant :
d’afficher des informations à destination de l’utilisateur
de lui demander de fournir certaines informations.
Définissez une fonction identification() sans paramètre qui demandera à l’utilisateur de s’identifier à l’aide d’un nom et qui renverra cette valeur sous forme d’une chaîne de caractères
Définissez une procédure presentation() acceptant en paramètre le nom de l’utilisateur. Elle affichera un message de bienvenue personnalisé et expliquera très brièvement le principe du jeu.
Définissez un prédicat poursuivre_le_jeu() qui a pour objectif de demander à l’utilisateur s’il souhaite tenter sa chance au jeu en lançant les dés. L’utilisateur répondra par exemple par « oui » ou « non », « yes » ou « no ». Ce prédicat renverra la valeur True si et seulement si le joueur désire poursuivre.
Affichage sur le terminal
La mise en forme des résultats va permettre au jeu d’être plus convivial.
Définissez une procédure affiche_lancer() acceptant trois paramètres correspondant aux valeurs de chacun des dés.
Cette fonction réalisera un affichage mis en forme des dés comme celui ci-dessous. Respectez strictement les caractères utilisés dans l’exemple :
>>> affiche_lancer(4, 3, 5)
+---+ +---+ +---+
| 4 | | 3 | | 5 |
+---+ +---+ +---+
Définissez enfin une procédure affiche_resultat() acceptant les trois mêmes paramètres et affichant un message de victoire ou d’échec suivant la réussite (peu probable en un essai !) du lancer.
One main to rule them all
Il vous reste à compléter la fonction principale point d’entrée de l’exécution du programme.
Elle appellera les fonctions que vous venez de définir dans un certain ordre.
Définissez une procédure main_421() sans paramètre.
Cette fonction devra, dans l’ordre :
procéder à l’identification de l’utilisateur
présenter le jeu
vérifier que le joueur souhaite jouer
si c’est bien le cas :
lancer chacun des dés
afficher le lancer
afficher le résultat du jeu (réussite ou non)
sinon : afficher un message adapté d’au revoir.
On sait comment lancer automatiquement l’ensemble des doctests lors de l’exécution du programme :
if __name__ == '__main__' :
import doctest
doctest.testmod(verbose = True)
On peut ajouter à ce bloc d’instruction conditionnelle l’appel à la fonction main_421(). Que va-t-il alors se passer lors de l’exécution de votre programme dans un terminal ?
Lancer l’exécution de votre programme dans un terminal.
##Fonctions propres au jeu du 421
from random import randint
def de():
return randint(1,4)
print (de())
def est_un_421(de1,de2,de3):
"""
Renvoie vrai si et seulement si deux dés forment un 42
Paramètres :
- de1 : entier - un lancer de dé six
- de2 : entier - un 2eme lancer de dé six
- de3 : entier - un 3eme lancer de dé six
Valeur de retour : booléen
Contraintes : de1, de2 et de3 appartiennent à [1, 6]
:Exemples:
>>> est_un_421(4, 2, 1)
True
>>> est_un_421(2, 4, 1)
True
>>> est_un_421(1, 2, 4)
True
>>> est_un_421(2, 1, 4)
True
>>> est_un_421(4, 0, 6)
False
>>> est_un_421(5, 1, 4)
False
"""
if (de1 == 4 or de1==2 or de1==1) :
if (de2==4 or de2==2 or de2==1) and de2 !=de1:
if (de3== 4 or de3==2 or de3==1 ) and (de3!=de2) and (de3!=de1):
return True
else :
return False
else :
return False
else :
return False
print(est_un_421(randint(1,6),randint(1,6),randint(1,6)))
## interaction avec l'utilisateur
def identification():
nom = input('nom ? ')
return (nom)
def presentation():
print('\nBienvenue ! ' ,end='')
identification()
print(' le but du 421 est de lancé 3 dés et de sortir 4,2, et 1 ')
def poursuivre_le_jeu():
"""
Renvoie vrai si et seulement si le joueur ecrit oui ou yes
Valeur de retour : booléen
Contrainte: accepter seulement oui, yes, non, no
:Exemples:
>>> poursuivre_le_jeu(oui)
True
>>> poursuivre_le_jeu(non)
False
>>> poursuivre_le_jeu(frfe)
False
"""
print('Voulez-vous jouer au jeu du 421?')
if 'oui' or 'yes' :
return True
elif 'non' or 'no':
return False
##Affichage sur le terminal
def affiche_lancer(a,b,c):
print('+---+ ' , end='')
print('+---+ ' , end='')
print('+---+')
print('| ' , end='')
print(a , end='')
print(' | ' , end='')
print('| ' , end='')
print(b , end='')
print(' | ' , end='')
print('| ' , end='')
print(c , end='')
print(' | ')
print('+---+ ' , end='')
print('+---+ ' , end='')
print('+---+')
return [a,b,c]
def affiche_resultat():
lancer = affiche_lancer(de(),de(),de())
print(lancer)
if (lancer==[1,2,4] or lancer==[1,4,2] or lancer==[2,1,4] or lancer==[2,4,1] or lancer==[4,2,1] or lancer==[4,1,2]):
print('bien joué')
else:
print('dommage')
return
##One Main to rule them all
def main_421():
presentation()
poursuivre_le_jeu()
affiche_resultat()
main_421()
Que le programme résolve la problématique, c'est bien ;-) C'est la base.
Mais particulièrement dans un cours de programmation, on attend que le code corresponde aussi à la forme demandée.
Par rapport à l'énoncé, les fonctions devraient être indépendantes et toutes lancées dans le main(), pas imbriquées. J'ignore comment cela peut être présenté dans tes cours, mais moi dans le main() j'initialiserais des variables joueur et lancer avec les return des fonctions. Ainsi tu peux les passer en entrée aux autres fonctions appelées
Puis ta ligne "Voulez-vous jouer au jeu du 421?" qui s'affiche sans demander la réponse de l'utilisateur, c'est nul. Et surtout l'énoncé demande d'utiliser le True/False pour lancer les dés, ou pas.
Merci Phil, j'ai un peu près compris ton programme sauf la fonction poursuivre_le_jeu()
rep est une variable ?
et if (rep in (oui,yes ,o,y)) veut dire que seul c'est caractère sont autorisé pour un return True les autres return False si j'ai bien compris
C'est vrai que j'aurais pu y penser de ressembler les parties hautes ensemble et parties basses ensemble par contre la partie du milieu j'ai pas encore vu, je sais pas a quoi sert le + devant et derrière le 'str'
En gros quand je rentre c'est deux def j'aimerai que identification() me permet d'écrire le nom et que presentation() le reprenne sans le réécrire une seconde fois