Exercice sur les fonctions

Résolu/Fermé
Theo_0055 Messages postés 275 Date d'inscription mardi 21 juillet 2020 Statut Membre Dernière intervention 19 janvier 2023 - Modifié le 1 janv. 2021 à 14:12
Theo_0055 Messages postés 275 Date d'inscription mardi 21 juillet 2020 Statut Membre Dernière intervention 19 janvier 2023 - 2 janv. 2021 à 19:03
Bonjour,pouvez vous m'aider svp a faire les quelques questions indépendantes de cette exercice
1)Ecrire la fonction repeter qui prend en argument un mot,choisit un entier n au hasard être 2 et 7,et renvoie le mot répété fois,séparés par des +
Le résultat attendu est "papa+papa" par exemple si n=2

import random

def lundi(mot):
    n=random.randint(2,7)
    for i in range(n):
        print(mot,end="")
        print("+",end="")




J'ai essayé de le faire mais j'obtiens toujours a la fin +None,comment faire pour m'en debarasser

9 réponses

jee pee Messages postés 39582 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 17 avril 2024 9 224
Modifié le 1 janv. 2021 à 14:44
Bonjour,

Après le dernier mot il ne faut pas de +, donc peut être rajouter un test pour imprimer "+" ou un saut de ligne quand c'est le dernier mot.

La fonction doit "renvoyer" le mot répété. Est-ce bien pareil que imprimer ? Ou ne serait-ce pas plutôt un return avec une variable qu'il faudrait faire ?



0
Theo_0055 Messages postés 275 Date d'inscription mardi 21 juillet 2020 Statut Membre Dernière intervention 19 janvier 2023 1
1 janv. 2021 à 15:32
Désolé j'ai pas trop compris ce que vous voulez dire
0
jee pee Messages postés 39582 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 17 avril 2024 9 224
1 janv. 2021 à 15:39
ton code ne va pas donner "papa+papa" mais "papa+papa+" ce qui n'est pas ce qui est demandé
0
Theo_0055 Messages postés 275 Date d'inscription mardi 21 juillet 2020 Statut Membre Dernière intervention 19 janvier 2023 1
1 janv. 2021 à 15:46
Oui c'est ça que je sais pas faire
0
jee pee Messages postés 39582 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 17 avril 2024 9 224
1 janv. 2021 à 15:52
il peut y avoir plusieurs façon de faire,
  • dans la boucle, faire un test pour savoir si c'est la dernière occurence et ne pas rajouter le "+"
  • faire une boucle n -1 fois et en sortie imprimer une nouvelle fois mot.


bis : La fonction doit "renvoyer" le mot répété. Est-ce bien pareil que imprimer ? Ou ne serait-ce pas plutôt un return avec une variable qu'il faudrait faire ?
0
Theo_0055 Messages postés 275 Date d'inscription mardi 21 juillet 2020 Statut Membre Dernière intervention 19 janvier 2023 1
1 janv. 2021 à 15:47
Et aussi comment eviter d'avoir none a la fin
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Theo_0055 Messages postés 275 Date d'inscription mardi 21 juillet 2020 Statut Membre Dernière intervention 19 janvier 2023 1
1 janv. 2021 à 17:02
Bonjour maintenant j'ai reussi
0
jee pee Messages postés 39582 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 17 avril 2024 9 224
1 janv. 2021 à 17:06
Bien ! donnes nous ton code final.
0
Theo_0055 Messages postés 275 Date d'inscription mardi 21 juillet 2020 Statut Membre Dernière intervention 19 janvier 2023 1
1 janv. 2021 à 17:51
import random
def lundi(mot):
    n=random.randint(2,7)
    for i in range(n):
        print(mot,end="")
        print("+",end="")
    return(mot)


x=lundi('salut')
print(x)
0
jee pee Messages postés 39582 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 17 avril 2024 9 224
1 janv. 2021 à 18:31
Je comprends ton None !!! Un print de x sans return dans la fonction = None

Comme je l'ai indiqué, rappelles toi ma remarque initiale, la fonction doit "renvoyer" le mot répété.

Donc ta solution avec des print dans la fonction ne répond pas à l'exercice. Il faut que la chaine retournée par le return contienne, non pas la valeur de départ, cela ne sert à rien, mais une chaine avec la concaténation.

Tu devrais voir les opérateurs de chaines
0
Theo_0055 Messages postés 275 Date d'inscription mardi 21 juillet 2020 Statut Membre Dernière intervention 19 janvier 2023 1
2 janv. 2021 à 07:44
Donc,pour cette question je dois pas utiliser print?
Plus tard j'essaierais encore d'y réfléchir
0
jee pee Messages postés 39582 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 17 avril 2024 9 224
Modifié le 2 janv. 2021 à 12:04
De toute façon tu dois te replonger dans l'exercice. Car quand n=2, ton code n'affiche pas salut+salut mais salut+salut+salut ! Tu as caché le défaut du + en fin de chaine.

Moi quand je lis l'énoncé je comprends que la fonction doit retourner une chaine "salut+salut". Et pourquoi appeler ta fonction lundi, ce n'est pas non plus ce qui est demandé. Je me souviens de professeurs qui auraient testé
repeter("papa")
==> note 0/20 la fonction ne se lance même pas.

Le squelette de ton code devrait être.
import random
def repeter(mot):
    n=random.randint(2,7)
    motsplus=""
    for i in range(n):
        ......
    return(motsplus)

x=repeter("salut")
print(x) 


et dans le corps utiliser des fonctions de concaténation de chaines de caractères. cf lien plus haut.
0
Theo_0055 Messages postés 275 Date d'inscription mardi 21 juillet 2020 Statut Membre Dernière intervention 19 janvier 2023 1
Modifié le 2 janv. 2021 à 16:59
Merci de votre aide,je l'ai fait
import random
def repeter(mot):
    n=random.randint(2,7)
    motsplus=""
    for i in range(n-1):
        motsplus+=mot+"+"
    motsplus+=mot

            
    return(motsplus)

x=repeter("salut")
print(x) 
0
jee pee Messages postés 39582 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 17 avril 2024 9 224
2 janv. 2021 à 17:43
Bravo, là cela fonctionne
0
Theo_0055 Messages postés 275 Date d'inscription mardi 21 juillet 2020 Statut Membre Dernière intervention 19 janvier 2023 1
2 janv. 2021 à 19:03
Merci c'est grâce a vous
0