Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Exercice][Débutant] Nombres impairs

    9 octobre 2013 à 7:24:01

    Pour faire plus simple on écris juste :

    from itertools import ifilterfalse
    nombre1 = input("entrez le premier nombre : ")
    nombre2 = input ("entrez le deuxieme nombre : ")
    paire = lambda n : n % 2 == 0
    ma_list = list(ifilterfalse(paire,range(nombre1,nombre2)))
    print ma_list

    c'est plus court

    • Partager sur Facebook
    • Partager sur Twitter
      9 octobre 2013 à 10:46:35

      @astroid : les bornes doivent être incluses dans la liste. Ton code ne retourne pas le bon résultat si je lui demande les nombres impairs entre 2 et 9 par exemple.

      Ensuite, c'est inutile de filtrer le résultat de range puisqu'on peut lui passer le pas de l'itération.

      >>> impairs = lambda a, b: range(a|1, b+1, 2)
      >>> list(impairs(2, 9))
      [3, 5, 7, 9]
      >>> list(impairs(3, 16))
      [3, 5, 7, 9, 11, 13, 15]
      

      La seule astuce que ce code utilise et qui n'est pas forcément immédiate à comprendre pour un débutant, c'est l'utilisation de l'opérateur | (bitwise OR) pour récupérer le premier nombre impair supérieur ou égal à a:

        0b0010  # 2 en binaire
      | 0b0001  # 1
      ---------------
        0b0011  # 3
      
      
        0b0011  # 3
      | 0b0001  # 1
      ---------------
        0b0011  # 3
      
      

      Ensuite, si on veut mettre le résultat en forme comme demandé dans l'énoncé :

      >>> ' '.join(map(str, impairs(3, 16)))
      '3 5 7 9 11 13 15'
      

      Donc pour répondre complètement à l'énoncé :

      def print_odds(a, b):
          print(' '.join(map(str, range(a|1, b+1, 2))))
      

      Plus simple, plus court, sûrement plus rapide, donne le même résultat en Python 2 et Python 3, et ne dépend d'aucun module de la bibliothèque standard.

      -
      Edité par nohar 9 octobre 2013 à 11:23:14

      • Partager sur Facebook
      • Partager sur Twitter
      Zeste de Savoir, le site qui en a dans le citron !
        19 octobre 2013 à 20:10:43

        Ma solution:

        strn1 = input('Entre ton premier nombre: ')
        n1 = int(strn1)
        strn2 = input('Entre ton deuxième nombre: ')
        n2 = int(strn2)
        n=0
        if n2<n1:
            n = n1
            n1 = n2
            n2 = n
        while n1<n2:
            if n1 % 2 == 0 :
                print(n1)
                n1 = n1+1
            else:
                n1=n1+1

        enjoy! :)

        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          20 octobre 2013 à 9:42:42

          Pour inverser 2 nombres tu peux faire ceci (l'avantage de python) ;)

          n1, n2 = n2, n1

          Pour ajouter un nombre, comme en C et beaucoup d'autres langages d'ailleurs

          n1 += 1

          Bonne continuation...

          • Partager sur Facebook
          • Partager sur Twitter
            30 mars 2014 à 22:34:14

             Voici une autre :

            def imp(a,b):

                  T=[]

                  for i in range(a,b+1):

                       if i%2!=0:

                          T=T+[i]

                  return T

            • Partager sur Facebook
            • Partager sur Twitter
              31 mars 2014 à 10:36:51

              voilà pour moi:

              imp = lambda a, b : [x for x in range(a, b+1) if x%2==1]

              même si je suis sur qu'elle à déjà été utilisée (la flemme de tout lire)...
              edit: a bah oui, c'était même la deuxième réponse

              -
              Edité par pythan 31 mars 2014 à 10:38:15

              • Partager sur Facebook
              • Partager sur Twitter
              Bevet Breizh! Breizh dizalc'h! Betek an trec'h! Ha mallozh ruz d'ar c'hallaoued! Trouvez votre voie
                31 mars 2014 à 11:54:39

                Pourquoi convertir explicitement la sortie en liste ? Ça rajoute du code inutilement étant donné que l'utilisateur n'a peut-être besoin que d'un itérateur :

                >>> imp = lambda a, b: range(a + (1 - a%2), b+1, 2)
                >>> list(imp(2, 16))
                [3, 5, 7, 9, 11, 13, 15]
                >>>  ', '.join(map(str, imp(3, 16)))
                '3, 5, 7, 9, 11, 13, 15'
                

                -
                Edité par nohar 31 mars 2014 à 11:55:50

                • Partager sur Facebook
                • Partager sur Twitter
                Zeste de Savoir, le site qui en a dans le citron !
                Anonyme
                  31 mars 2014 à 12:13:28

                  >>> def imp(a, b):
                  ...     for i in range(a, b+1):
                  ...         if i%2:
                  ...             yield i
                  ... 
                  >>> ', '.join(map(str, imp(3, 16)))
                  '3, 5, 7, 9, 11, 13, 15
                  

                  À l'aide d'un générateur, on garde en mémoire chaque résultat correct grâce au mot clé yield...

                  • Partager sur Facebook
                  • Partager sur Twitter
                    12 juin 2014 à 17:34:10

                    Bon aller, je post le miens. Ca reste du classique mais en même temps ça fonctionne bien donc :

                    def impair(x, y):
                        for i in range(y, x+1):
                            if i%2 == 1:
                                print (i, end=" ")



                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      12 juin 2014 à 17:51:50

                      Pour le fun, en une ligne:

                      def impairs(inf, sup): return [n for n in range(inf, sup) if n%2 == 1]

                      Edit: Je viens de voir la version de pythan (j'avais la flemme de tout lire aussi xD).
                      Re-edit: @fred1599: On peut toujours renvoyer une liste l'utiliser comme un générateur non ?:

                      s = ""
                      for i in impairs(0, 1000):
                          s += "{} ".format(i)

                      -
                      Edité par Anonyme 14 juin 2014 à 14:12:36

                      • Partager sur Facebook
                      • Partager sur Twitter
                        13 juin 2014 à 9:07:00

                        Salut,

                        Voici mon code (surement déjà posté) :

                        def intervalle(nombre1,nombre2):
                        	return [nb for nb in range(nombre1,nombre2+1) if nb%2]
                        
                        intervalle(3,7)
                        
                        



                        • Partager sur Facebook
                        • Partager sur Twitter
                          14 juin 2014 à 13:49:10

                          Bon je viens de découvrir quelque chose d'intéressant avec le slicing. Il accepete un 3ème argument qui représente le pas:

                          def nombres_impairs(min, max):
                              ma_liste = list()
                              for nombre in range(min, max+1):
                                  ma_liste.append(nombre)
                              if min%2:
                                  return ma_liste[::2]
                              else:
                                  return ma_liste[1::2]

                          L'intérêt est juste de montrer une autre façon de sélectionner les éléments. En fait cette méthode est pratique quand la liste est déjà formée.

                          • Partager sur Facebook
                          • Partager sur Twitter
                          Précepte: Le mieux est l'ennemi du bien
                            14 juin 2014 à 13:56:56

                            Je connaissais pas non plus, merci olygrim ça peut servir :)
                            • Partager sur Facebook
                            • Partager sur Twitter
                              22 septembre 2014 à 21:23:50

                               Bon un peu en retard :D mais je propose quand même ma solution, assez moche je vous l'accorde:

                              def fonction (mini , maxi):
                                
                               liste_nb = []
                              
                               if mini % 2 == 0: # Si le premier nombre est pair
                                 mini += 1 # Le rendre impair 
                                 liste_nb.append(mini)
                                 while mini < maxi - 1: #Tant que le nombre mini est inférieur au maxi
                                  mini += 2
                                  liste_nb.append(mini) # On ajoute les nombres impairs dans la liste
                                
                              
                               else:
                                 while mini < maxi - 1:
                                  mini += 2
                                  liste_nb.append(mini)
                                 
                              
                               liste_nb = str(liste_nb)
                               print(liste_nb)

                              -
                              Edité par Koreas 22 septembre 2014 à 21:26:04

                              • Partager sur Facebook
                              • Partager sur Twitter
                                21 septembre 2015 à 1:19:08

                                def prologin(arg1,arg2):
                                    t=[]
                                    s=arg1
                                    while(s!=arg2+1):
                                        if(s%2==0):
                                            pass
                                        else:
                                            t.append(s)
                                        s+=1
                                    return t
                                #programme principale        
                                arg1=int(input("donnez votre nb1:"))
                                arg2=int(input("donnez votre nb2:"))
                                print(prologin(arg1,arg2))                
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  25 février 2016 à 10:31:26

                                  # Exercice nombre impair
                                  
                                  # Initialisation
                                  
                                  n = int
                                  
                                  # Traitement
                                  
                                  for n in range(43,51):
                                  
                                       if n % 2 != 0:
                                  
                                           print(n)
                                  
                                  


                                  bonjour j'ai essayé d'en faire un simple qui marche, voici ma solution:

                                  -
                                  Edité par BenoitForestier2 25 février 2016 à 11:05:24

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  Anonyme
                                    25 février 2016 à 13:08:23

                                    C'est un énorme déterrage ça :o

                                    Je trouve vos codes assez inefficaces, presque tout le monde a itéré entre les deux nombres et à tester pour chaque nombre la validité avec un modulo... Une autre idée qui ne fait intervenir que 2 opérations de modulo, quelque soit la longueur de l'intervalle:

                                    a, b = int(input()), int(input())
                                    print(' '.join(map(str, range(a if a%2 else a+1, b, 2))))

                                    EDIT: la solution
                                    de nohar ressemble beaucoup à la mienne, je n'avais pas vu.

                                    -
                                    Edité par Anonyme 25 février 2016 à 13:11:41

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      21 juillet 2016 à 15:42:25

                                      Je re-déterre !

                                      Voilà mon code, je veux bien un avis :)

                                      print "programme pour trouver tous les impairs entre deux valeurs."
                                      debut = int(raw_input("saisir la valeur basse : \n"))
                                      fin = int(raw_input("saisir la valeur haute : \n"))
                                      list_impairs = []
                                      if debut%2 ==1:
                                      	step = debut
                                      else:
                                      	step = debut+1
                                      while step <= fin:
                                      	list_impairs.append(step)
                                      	step +=2
                                      print list_impairs
                                      
                                      



                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      Avide de connaissances en électronique/dév/admin sys/db/réseau !
                                        21 juillet 2016 à 23:06:37

                                        ftassy a écrit:

                                        Voilà mon code, je veux bien un avis :)

                                        Pense à respecter les espaces autour des opérateurs, et à utiliser une boucle for quand tu veux itérer sur des nombres. Aussi, si tu débutes ton apprentissage, je te conseille plutôt de commencer avec Python 3.

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          22 juillet 2016 à 10:30:29

                                          @entwanne : j'ai du mal à voir comment mettre en œuvre un for dans cet exemple ? Sauf éventuellement à la fin pour l'affichage, en faisant

                                          for value in list_impairs:
                                              print value."\n"


                                          Encore une fois merci de ton retour :)



                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                          Avide de connaissances en électronique/dév/admin sys/db/réseau !
                                            22 juillet 2016 à 10:55:17

                                            Je pensais au for pour remplacer ton while step <= fin :

                                            if debut%2 != 1:
                                                debut += 1
                                            for step in range(debut, fin + 1, 2):
                                                list_impairs.append(step)
                                            

                                            Mais en l'écrivant, je me rends compte qu'il est inutile, le range peut directement être converti en liste.

                                            if debut%2 != 1:
                                                debut += 1
                                            list_impairs = list(range(debut, fin + 1, 2))
                                            
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              29 septembre 2017 à 18:16:21

                                              def resultat(nb1,nb2):
                                                  try:
                                                      assert nb1<nb2
                                                  except AssertionError:
                                                       nb1,nb2=nb2,nb1
                                                  for i in range(nb1,nb2+1):
                                                      if i%2:
                                                          print(i,end=" ")
                                              print("Donner deux nombres pour savoir les nombres impaires qui se situent entre eux")
                                              nb1=int(input("nombre 1 : "))
                                              nb2=int(input("nombre 2: "))
                                              resultat(nb1,nb2)

                                              -
                                              Edité par Linzosall1 29 septembre 2017 à 18:18:32

                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                              Anonyme
                                                29 septembre 2017 à 18:54:38

                                                Quelques remarques

                                                • Utiliser les balises code (regarder les règles du forum)
                                                • Indenter correctement, une ligne se trouve avec 9 espaces au lieu de 8.
                                                • Assert ne sert que pour du débuggage, selon l'exercice proposé cela n'est pas utile
                                                • Éviter le print dans une fonction, dans 95% des cas, return est le mot clé ultime.
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  3 novembre 2017 à 18:41:29

                                                  # -*- coding: UTF-8 -*-

                                                  res = lambda a, b: [i for i in range(a, b+1) if i%2 != 0]
                                                  res(42, 51)
                                                  [43, 45, 47, 49, 51]
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    16 avril 2018 à 22:05:10

                                                    Voilà ma version. Pour autant j'aimerai savoir comment choisir les deux variables dans la même ligne. Merci par avance.
                                                    a = int(input("premier nombre: "))
                                                    b = int(input("deuxième nombre : "))
                                                    impairs = []
                                                    
                                                    for i in range(a,b + 1):
                                                        if i % 2 != 0:
                                                            impairs.append(i)
                                                    
                                                    print("La liste des nombres impairs entre ",a," et ",b,"est : ")
                                                    print(impairs)
                                                    



                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      30 mars 2019 à 14:10:58

                                                      nombre = input(" a (space) b : ").split(" ")

                                                      num1 = nombre[0]
                                                      num2 = nombre[1]

                                                      num1 = int(num1)
                                                      num2 = int(num2)

                                                      if num1 % 2 == 0:
                                                      num1 += 1

                                                      while num1+1 <= num2 :
                                                      num1 += 2
                                                      print(num1)
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        31 mai 2019 à 11:15:40

                                                        Bonjour ! Je ne sais pas si quelqu'un va lire mon message vu que j'arrive environ neuf ans plus tard...

                                                        En fait j'ai réussi à trouver un code qui permet de générer les nombres impairs d'un intervalle donné. Mais j'ai un petit soucis, c'est que, à la fin, les nombres impairs ne sont pas donnés comme un liste, mais un à un (un par ligne quoi) ce qui prend beaucoup de place et n'était pas le but. Quelqu'un pourrait m'éclaircir ? Je suis vraiment débutant donc je suis pas totalement conscient de ce que je fais (mdr).

                                                        Je suis tellement débutant que j'ai pas compris comment partager mon code, du coup voilà :

                                                        x = input ("premier nombre (positif) :")

                                                        y = input ("second nombre (positif) :")

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

                                                            if (i % 2 != 0) :

                                                                print ("les nombres impairs sont :"),(i)

                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          31 mai 2019 à 12:32:20

                                                          Salut,

                                                          Si, si, il y a toujours des gens.

                                                          Alors c'est très bien de t'attaquer à ce genre d'exercice, mais appuie-toi aussi sur le cours que tu suis pour apprendre et comprendre. Aussi, quand tu dis que tu as « trouvé un code », c'est que tu l'as codé ou que tu l'as trouvé tout fait ?

                                                          Est-ce que tu as déjà manipulé des listes ? Sais-tu comment ajouter un élément à une liste ?

                                                          Ici le problème c'est qu'un appel à la fonction print affiche un message. Si tu veux faire autre chose qu'un affichage (par exemple ajouter une valeur à une liste), appelle une fonction qui fait cela.

                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            31 mai 2019 à 13:17:25

                                                            Bonjour, merci de la réponse.

                                                            Je l'ai trouvé dans le sens ou je l'ai codé seul en cherchant un petit peu et en testant. Je sais comment marche une liste (en tout cas dans les grandes lignes) mais c'est vrai que je n'ai pas lu tous les cours, faudrait peut-être que je m'y mette. Donc, d'après ce que j'ai compris : pour ajouter on utilise .append ou .insert et pour supprimer on utilise del ou .remove . 

                                                            Je vais essayer d'améliorer avec votre commentaire, merci

                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                              13 juin 2019 à 20:52:01

                                                              x = input ("premier nombre (positif) :")

                                                              y = input ("second nombre (positif) :")

                                                              resultat = []

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

                                                                  if (i % 2 != 0) :

                                                                      resultat.append(i)

                                                              print (resultat) 

                                                              • Partager sur Facebook
                                                              • Partager sur Twitter

                                                              [Exercice][Débutant] Nombres impairs

                                                              × 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