Menu

Openclassroom chaine de caractére .format

Messages postés
1
Date d'inscription
mercredi 30 janvier 2019
Statut
Membre
Dernière intervention
30 janvier 2019
- - Dernière réponse : GrumbyOrSweety
Messages postés
1
Date d'inscription
mercredi 15 mai 2019
Statut
Membre
Dernière intervention
15 mai 2019
- 15 mai 2019 à 19:36
Bonjour,

je suis les cours sur OpenClassRoom
et j'ai un exercice python , voila ce que j'écris mais rien ne se passe , même pas une erreur :

def create_message(character, quote):
"{} a dit : {}".format("JC Duss","Quand te reverai-je ? pays merveilleux!")

create_message


et voila le message de correction d'Open pour m'aider :


def create_message(character, quote):
“{} a dit : {}”.format(character, quote)

create_message("Le Génie", "Oui, Ali, oui c'est bien lui, Ali Ababoua ! A genoux, prosternez-vous, soyez ravis...")
Afficher la suite 

Votre réponse

1 réponse

Messages postés
1
Date d'inscription
mercredi 15 mai 2019
Statut
Membre
Dernière intervention
15 mai 2019
0
Merci
Bonjour,

Votre fonction create_message pose deux problèmes :
1) elle ne renvoie rien, donc vous n’obtenez rien.
2) vous lui donnez deux arguments (character et quote) mais vous ne les utilisez pas.

Concernant le 1) :
Vous devez donner une instruction dans le corps de votre fonction ; dans le cas présent, soit une instruction print, soit une instruction return. Par ailleurs, lorsque vous lancez votre fonction, n’oubliez pas () à la fin de votre code.
Voici quelques exemples pour vous montrer ce que renvoie ou ne renvoie pas une fonction :

Cas 1 :
def message():
"JC Duss a dit : Quand te reverai-je ? pays merveilleux!"

print(message)
<function message at 0x7fe4f94b71b8>

Cela vous indique son nom et son adresse en mémoire. message sans les parenthèses est un objet fonction. Ce que vous saurez si vous demandez son type.

type(message)
function


Cas 2 :
def message():
"JC Duss a dit : Quand te reverai-je ? pays merveilleux!"

message()

Vous avez lancé la fonction, mais vous n’obtenez rien car vous ne demandez rien à cette fonction.
Et si vous demandez le type :

type(message())
NoneType


Cas 3 :
def message():
"JC Duss a dit : Quand te reverrai-je ? pays merveilleux!"
print(message())

None

Comme rien n’est renvoyé par votre fonction, python vous indique que l’élément est None.

Vous devez donc donner une instruction dans le corps de votre fonction, par exemple :
Cas 4 :
def message():
print("JC Duss a dit : Quand te reverrai-je ? pays merveilleux!")
message()

JC Duss a dit : Quand te reverrai-je ? pays merveilleux!

Et si vous demandez le type de message() vous obtiendrez NoneType

Cas 5 :
def message():
return "JC Duss a dit : Quand te reverrai-je ? pays merveilleux!"

message()
'JC Duss a dit : Quand te reverrai-je ? pays merveilleux!'

Notez l’existence des quotes dans le renvoi de la fonction.

type(message())
str

Ici, la valeur retournée est un string (ce qui est plutôt rassurant comme résultat!).

Cas 6 :
def message():
return "JC Duss a dit : Quand te reverrai-je ? pays merveilleux!"

print(message())
JC Duss a dit : Quand te reverrai-je ? pays merveilleux!

Notez ici l’absence de quotes. Le renvoi est le message que vous aviez demandé.
Utiliser return plutôt que print dans le corps de la fonction permet de manipuler la valeur renvoyée, ce qui peut être utile.

Concernant le 2) :
Je me place dans l’hypothèse où vous donnez comme instruction print() à votre fonction.
Si vous donnez des arguments à votre fonction, il faut les utiliser ! Sinon autant ne pas en mettre.

Cas 1 :
def message(character, quote):
print("{} a dit : {}".format("JC Duss","Quand te reverrai-je ? pays merveilleux!"))
message()

TypeError: message() takes exactly 2 arguments (0 given)


Effectivement, vous avez créé une fonction avec deux arguments (character et quote) mais vous n’en donnez aucun lorsque vous appelez la fonction.

Cas 2 :
def message(character, quote):
print("{} a dit : {}".format("JC Duss","Quand te reverrai-je ? pays merveilleux!"))
message("JC Duss","Quand te reverrai-je ? pays merveilleux!")

JC Duss a dit : Quand te reverrai-je ? pays merveilleux!

Vous êtes content car vous avez obtenu ce que vous vouliez. Mais en fait, tout ceci est inutile. Car quelques soient les arguments que vous indiquez, la même phrase sera toujours imprimée :
Cas 3 :
def message(character, quote):
print("{} a dit : {}".format("JC Duss","Quand te reverrai-je ? pays merveilleux!"))
message("Achille","J'ai mis une grosse trempe à Hector")

JC Duss a dit : Quand te reverrai-je ? pays merveilleux!

Fatalitas ! Vous retombez sur JC Duss et vous n’avez pas obtenu la phrase souhaitée sur Achille et Hector.

Cas 4 :
def message(character, quote):
print("{} a dit : {}".format(character,quote))
message("JC Duss","Quand te reverrai-je ? pays merveilleux!")

JC Duss a dit : Quand te reverrai-je ? pays merveilleux!

Vos deux arguments (character et quote) sont dans le corps de la fonction et lorsque vous appelez votre fonction en donnant à ces arguments les valeurs que vous souhaitez, vous obtenez le résultat ad hoc.
L’avantage d’utiliser une fonction à arguments est que vous pouvez l’utiliser pour donner les messages que vous voulez sans avoir à réécrire la fonction à chaque fois :

Cas 5 :
def message(character, quote):
print("{} a dit : {}".format(character,quote))
message1 = message("JC Duss","Quand te reverrai-je ? pays merveilleux!")
message2 = message("Achille","J'ai mis une grosse trempe à Hector")
message1
message2

JC Duss a dit : Quand te reverrai-je ? pays merveilleux!
Achille a dit : J'ai mis une grosse trempe à Hector

Ma réponse est quelque peu tardive et j’imagine que vous avez trouvé par vous-même la solution. Mais ces quelques lignes vous aideront peut-être à mieux comprendre les fonctions et l’intérêt des arguments.
Bonne continuation.
Commenter la réponse de GrumbyOrSweety