Partage
  • Partager sur Facebook
  • Partager sur Twitter

pb de liste

    20 janvier 2018 à 22:04:51

    bonjour, 

    j'ai écrit un programme qui demande deux entiers a l'utilisateur et qui renvoie tous les nombres impairs de l intervalle.

    Pour l'instant le programme me renvoie le résultat avec une liste ex:[1,3,5] mais je voudrais qu'il renvoie 1 3 5.

    Quelqu'un a-t-il une astuce?

    voici mon programme. Qu'en pensez vous?:

    L=[]

    x=int(input("Entrez un entier"))

    y=int(input("Entrez un autre entier"))

    if x>y:

        x,y=y,x

    for n in range(x,y+1):

        if n%2==0:

            impair=False

        else:

            impair=True

        if impair:

           L.append(n)

    print(L)

    -
    Edité par FredGiordani 20 janvier 2018 à 22:06:21

    • Partager sur Facebook
    • Partager sur Twitter
      21 janvier 2018 à 0:33:09

      Tu entend quoi par "retourner x,y,z" et non "[x,y,z]" ?

      Si tu veux faire 

      \[x,y,z = my_function()\]

      il suffit de retourner un tableau de longueur 3

      • Partager sur Facebook
      • Partager sur Twitter

      CodeWe is an open-source live code-sharing website.

        21 janvier 2018 à 1:02:07

        pour l instant le programme me renvoie une liste. Si je tape premier entier:14 et deuxieme entier 25. le programme retourne [15, 17,19,21,23,25].

        J'aimerais obtenir le même résultat mais sous cette forme: 15 17 19 21  23 25

        Je trouve que ça ferait plus propre. 

        Je me demande s'il existe une méthode permettant d'obtenir ce résultat.

        • Partager sur Facebook
        • Partager sur Twitter
          21 janvier 2018 à 1:30:37

          Bonjour,

          Regarde la fonction join(). c'est pile ce que tu recherches :)

          Bon courage

          • Partager sur Facebook
          • Partager sur Twitter
            21 janvier 2018 à 15:34:05

            Pas besoin de join, il suffit simplement d'utiliser print couplé à l'unpacking et de modifier le paramètre sep:

            lst = [1, 3, 5, 7, 9, 11]
            
            print(*lst, sep=" ")



            Sinon dans ton code, plusieurs astuces. La première c'est de mettre directement le append dans la condition (au lieu d'utiliser une variable intermédiaire). Ça te permettra d'avoir un code moins lourd:

            for n in range(x,y+1):
                if n%2 != 0:
                    L.append(n)



            Ensuite la fonction range peut prendre un 3ème paramètre qui est le pas entre deux valeurs. Ainsi plus besoin de la condition:

            for n in range(x, y+1, 2):
                L.append(n)



            Enfin, tu peux directement convertir le range en liste grâce à la fonction list (donc plus besoin de boucle) ;):

            lst = list(range(x, y + 1, 2))
            
            print(*lst, sep=" ")
            • Partager sur Facebook
            • Partager sur Twitter
            Précepte: Le mieux est l'ennemi du bien
              21 janvier 2018 à 16:23:57

              Sauf que si x est pair, le range renverra tous les pairs au lieu des impairs
              • Partager sur Facebook
              • Partager sur Twitter
              Censément, quelqu'un de sensé est censé s'exprimer sensément.
                21 janvier 2018 à 20:49:08

                Merci coni63, j'ai tenté avec join mais, apparemment avec des entiers, python affiche un message d'erreur. Merci beaucoup, Olygrim pour le couplage unpacking et le paramètre sep. Mon programme affiche désormais ce que je veux. Le fait de pouvoir rentrer un pas dans l'intervalle me sera utile de même que la conversion range en liste. Je n'avais pas précisé mais je m'étais mis comme contrainte d'utiliser des boléens. J'ai bien fait de ne pas le préciser au finish tes conseils me seront très utiles.
                • Partager sur Facebook
                • Partager sur Twitter
                  22 janvier 2018 à 0:01:34

                  @sehnsucht: bien vu ;). Il faut donc rajouter une vérification pour la valeur de début
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Précepte: Le mieux est l'ennemi du bien
                    22 janvier 2018 à 8:20:13

                    Solution «vicieuse»

                    list(range((x >> 1 << 1) + 1, y + 1, 2))
                    

                    … ça me soule le markdown …

                    -
                    Edité par Sehnsucht 22 janvier 2018 à 8:23:52

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Censément, quelqu'un de sensé est censé s'exprimer sensément.
                      22 janvier 2018 à 10:43:55

                      On peut utiliser le fait que True et False ont une valeur numérique. C'est crade je trouve, mais ça fonctionne :'(:

                      if x > y:
                          x, y = y, x
                      
                      list(range(x + (x%2 == 0), y+1, 2))
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Précepte: Le mieux est l'ennemi du bien

                      pb de liste

                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                      • Editeur
                      • Markdown