Reprendre le résultat d'une definition précédente
Résolu
lou_9631
Messages postés
22
Statut
Membre
-
lou_9631 Messages postés 22 Statut Membre -
lou_9631 Messages postés 22 Statut Membre -
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''
Si j'ai mal expliquer je suis désolé faites le moi savoir j'essayerai de réexpliquer autrement
MERCI .
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 .
12 réponses
-
bonjour,
print(identification() ,end='')
mais une telle façon de faire ne permet pas de retrouver plus tard le nom du joueur, il faut utiliser une variable
-
Bonjour,
dans ta fonction identification, tu écris return(input())
il faudrait mieux écrire:
def identification(): nom = input('nom ? ') return(nom)
puis, ici, le return ne sert à rien, et il manque () après identification :
def presentation(): print('Bienvenue ' ,end='') identification() print(' le but du 421 est de lancer 3 dés et de sortir 4, 2, et 1 ')-
- 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()
ca donne ça :
-
-
Bon vu que mon problème à été résolu et j'ai un deuxième problème dans le même genre je le poste ici
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(): if affiche_lancer(de(),de(),de())==((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: print('dommage')
pourquoi dans le programme au dessus le résultat affiché est toujours dommage même quand je tombe sur 421 . -
Bonjour lou,
C'est forcément parce qu'il y a un problème ici, tu ne crois pas ?
if affiche_lancer(de(),de(),de())==((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é')
Le test n'est pas bon, donc on tombe toujours dans leelse:
Déjà, c'est quoide()
?
C'est une fonction? On ne la voit pas dans ton code .......
Tu devrais afficher le code complet, ce serait plus compréhensible
Ensuite, tu devrais revoir ton cours sur le langage Python:
On n'écris pas :
if(a == 1 or 2 or 3 or 4):
mais :
if(a==1 or a==2 or a==3 or a==4):
Une astuce supplémentaire:
si de() renvoie un dé
d1 = de() d2 = de() d3 = de() lancer = [d1,d2,d3] lancer.sort() if(lancer == [1,2,4]): print('bien joué): else: print('dommage')-
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()
-
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
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 ...
Ca, c'est un test où j'ai gagné: -
Il suffit de lire le code:
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
puisque grace au tri, 124, 142, 214, 241, 412, 421 deviennent forcément 1,2,4 !
Tu vois le truc ?-
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 lancerdef 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 -
Bonjour,
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 -
-
-
ok, mais tu peux quand même simplifier comme ça:
au lieu de:
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]):
tu mets:
lancer.sort() if (lancer==[1,2,4]): print('Bien joué !') -
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éesjoueur=identification() presentation(joueur) lancer=(de(),de(),de()) afficher_lancer(lancer) afficher_resultat(lancer)
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.
-
hello lou,
Avec tes fonctions, ça peut donner ceci:# -*- coding:Latin-1 -*- from random import randint def de(): return randint(1,7) def est_un_421(lancer): ''' ''' if(lancer == [1,2,4]): return(True) else: return(False) def identification(): nom = input('Quel est ton nom ? ') return (nom) def presentation(): print('\n ******* Jeu du 421 *****\n') nom = identification() print('\nBienvenue', nom) print('\nle but du jeu est de lancer 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 ou o ou y """ rep = input('Voulez-vous jouer au jeu du 421 ? (oui, yes, o, y) : ') if(rep in ['oui', 'yes', 'o', 'y']): return True else: return False def affiche_lancer(a,b,c): print('''\nC'est parti !\nLe lancé :''') print('\n+---+ ' , 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()) lancer.sort() if (est_un_421(lancer)): print('\nBien joué !!!\n') else: print('\nAh, dommage ...\n') def main_421(): presentation() if(poursuivre_le_jeu()): affiche_resultat() else: print('\nBye !') main_421() input('entrée ...')
Résultat:
-
bonjour Lou,
rep est une variable qui reçoit donc la réponse 'yes' ou 'oui' ou 'o' ou 'y'
si tu tapes 'yes', rep est égal à 'yes'
ensuite
if(rep in ['oui', 'yes', 'o', 'y']):
c'est une façon plus courte de tester
si rep == 'yes' ou rep =='oui', etc ...
on teste si le contenu de rep est dans la liste ['oui', 'yes', 'o', 'y'], donc si il est égal à l'une de
ces 4 chaines de caractères, donc rep ne contient pas forcément 1 seul caractère
Donc si rep égal à l'une des 4, ca renvoie True (je veux jouer ...), sinon c'est que tu as tapé autre
chose comme 'non' ou 'n' par exemple et là ça renvoie False (je ne veux pas jouer ...)
Si tu tapes 'non', ça affiche 'Bye !' et le programme s'arrete
Une version plus courte et plus simple de ta fonction affiche_lancer:def affiche_lancer(a,b,c): print('''\nC'est parti !\nLe lancé :''') print('\n+---+ +---+ +---+') print('| '+str(a)+' | | '+str(b)+' | | '+str(c)+' |') print('+---+ +---+ +---+') return[a,b,c] -
ok,
et que penses-tu de ma version simplifiée de afficher_lancer() ?
il faut toujours faire court et simple, et éviter les "usines à gaz" :-) -
On peut même faire une version plus "pythonesque" avec les formats,
ca évite la concaténation avec + :
print('| {} | | {} | | {} |'.format(a,b,c))
Au fait, un dernier point:
dans ta fonction de(), tu avais écritreturn randint(1,4)
, donc tu ne
sortait que les faces 1 à 3 du dé
Dans ma version, j'ai mis :return randint(1,7)
pour sortir des chiffres
entre 1 et 6 ...
