Exercice sur les fonctions

Résolu
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

  1. Modérateur
    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 ?

    1. Désolé j'ai pas trop compris ce que vous voulez dire
      1. Modérateur
        ton code ne va pas donner "papa+papa" mais "papa+papa+" ce qui n'est pas ce qui est demandé
    2. Oui c'est ça que je sais pas faire
      1. Modérateur
        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 ?
    3. Bonjour maintenant j'ai reussi
      1. Modérateur
        Bien ! donnes nous ton code final.
    4. 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)
      
      1. Modérateur
        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
    5. Donc,pour cette question je dois pas utiliser print?
      Plus tard j'essaierais encore d'y réfléchir
      1. Modérateur
        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.
    6. 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) 
      
      1. Modérateur
        Bravo, là cela fonctionne