Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Exercice][Débutant] Nombres impairs

    19 juillet 2010 à 12:33:54

    Bonjour,

    Voici ma première proposition d'exercice :

    Citation : Prologin

    Il s'agit d'écrire une fonction qui prend deux entiers en paramètres, et qui affiche, dans l'ordre croissant, tous les nombres impairs se trouvant entre ces deux entiers, inclus. Vous devez afficher ces nombres, en les séparant uniquement d'un espace.



    J'ai trouvé le lien de l'énoncé sur Prologin.

    Exemple :
    Entrée Sortie
    42 51 43 45 47 49 51


    Je trouve cet exercice très bien pour les débutants. Vous aurez besoin essentiellement de ces notions :


    Je récapitule donc le but de l'exercice : il nous faut une fonction qui prend en paramètre deux nombres (entrés sur la même ligne). Ces deux nombres définissent "l'intervalle". La fonction va donc afficher tous les nombres impairs (rangés dans un ordre croissant) compris dans cet intervalle.
    • Partager sur Facebook
    • Partager sur Twitter
      19 juillet 2010 à 12:55:26

      Petits conseils :



      *) explicite davantage l'énoncé, précise les points que certains zéros risquent de ne pas comprendre, de trouver ambigus ;
      *) précise le cadre des oumission des exos sur Prologin ;
      *) ne donne pas ta correction immédiatement, ça fait chercher davantage ;)
      • Partager sur Facebook
      • Partager sur Twitter
        19 juillet 2010 à 13:01:34

        Citation : candide


        *) explicite davantage l'énoncé, précise les points que certains zéros risquent de ne pas comprendre, de trouver ambigus ;



        Je ne vois pas trop quoi rajouter :(

        Citation : candide


        *) précise le cadre des oumission des exos sur Prologin ;



        Comment ça ? Le concours ?
        • Partager sur Facebook
        • Partager sur Twitter
          19 juillet 2010 à 13:12:35

          Bonjour

          Voici ma version :
          def f():
              input = [int(n) for n in raw_input().split(' ')]
              print ' '.join([str(n) for n in xrange(input[0], input[1] + 1) if n % 2 == 1])
          
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            19 juillet 2010 à 13:18:25

            Et la mienne

            >>> impair=lambda x, y:[n for n in range(x, (y+1)) if n%2]
            >>> impair(42, 51)
            [43, 45, 47, 49, 51]
            


            • Partager sur Facebook
            • Partager sur Twitter
              19 juillet 2010 à 13:40:02

              Je propose :
              def impair(x,y):
              	if not x%2:
              		x+=1
              	y+=1
              	return([x for x in range(x,y,2)])
              


              J'ai essayé de faire une code un peu plus "algorithme conventionnel" que celui de Eponix et fred1599, j'ai quand même une préférence pour le tiens fred.
              • Partager sur Facebook
              • Partager sur Twitter
                19 juillet 2010 à 13:53:50

                Citation : nicodec57


                Comment ça ? Le concours ?



                Prologin met à disposition un serveur qui valide (ou pas ;) ) ton code Python.
                • Partager sur Facebook
                • Partager sur Twitter
                  19 juillet 2010 à 13:54:11

                  Et voici la mienne, qui est un peu plus "traditionnel" :
                  import os
                  import time
                  
                  T1 = time.clock() # temps d'execution
                  
                  def impairs(n,m):
                  	i = 0
                  	while i<=m:
                  		if n%2 == 0 and i == 0: # pairs
                  			i = n + 1
                  			continue
                  		elif n%2 != 0 and i == 0: # impairs
                  			i = n + 2
                  			continue
                  		print(i, end=' ')
                  		i+=2
                  
                  # test de la fonction
                  if __name__ == "__main__":
                  
                  	# avoir les deux valeurs entrées sur la même ligne
                  	chaine = input()
                  	chaine = str(chaine) # on crée une chaine
                  	liste = chaine.split(" ") # on sépare les nombres en créant une liste qui délimite les nb par " "
                  	n = int(liste[0]) # on récupère dans des variables
                  	m = int(liste[1])
                  	
                  	impairs(n,m) # appel de la fonction impairs avec en paramètre l'intervalle
                  
                  
                  T2 = time.clock() # temps d'execution
                  print ("\n\n\n", T2-T1)
                  	
                  os.system("pause")
                  


                  J'ai quelques difficultés avec vos codes o_O
                  Je commence juste le Python : Liste à puces (2/2)

                  Je tiens à préciser que Prologin dit :

                  Citation : Prologin


                  ENTREE
                  Vous devez lire une ligne sur l'entrée :
                  Deux entiers, séparés par un espace : N et M.
                  SORTIE
                  Vous devez écrire une ligne sur la sortie :
                  Cette ligne contient tous les entiers impairs compris entre les deux nombres, séparés par des espaces.




                  Citation : candide

                  Citation : nicodec57


                  Comment ça ? Le concours ?



                  Prologin met à disposition un serveur qui valide (ou pas ;) ) ton code Python.



                  Ha ? Je n'étais pas au courant :o
                  • Partager sur Facebook
                  • Partager sur Twitter
                    19 juillet 2010 à 14:17:46

                    Les codes de fred et Eponix passent les tests de Prologin (Python 2.6)

                    Citation : Shang-Tsung

                    Je propose :

                    return([x for x in range(x,y,2)])
                    



                    Tu compliques. Tout simplement return range(x,y,2)
                    • Partager sur Facebook
                    • Partager sur Twitter
                      19 juillet 2010 à 14:24:24

                      Salut, moi j'ai fait ça :
                      # Générer tous les nombres impairs n compris dans [a, b[
                      
                      def f(a, b):
                          return [i for i in range(a, b) if i % 2 != 0]
                      

                      • Partager sur Facebook
                      • Partager sur Twitter
                        19 juillet 2010 à 14:32:44

                        Deux autres versions :
                        impair = lambda n, m: [2 * i + 1 for i in range(n / 2, (m + 1) / 2)]
                        impair = lambda n, m: range((n / 2) * 2 + 1, m + 1, 2)
                        

                        Edit : D'ailleurs la dernière peut s'écrire comme ça :
                        impair = lambda n, m: range(n | 1, m + 1, 2)
                        
                        • Partager sur Facebook
                        • Partager sur Twitter
                          19 juillet 2010 à 15:00:54

                          Citation : Colb-Seton

                          Salut, moi j'ai fait ça :



                          Passe pas les tests ;)
                          • Partager sur Facebook
                          • Partager sur Twitter
                            19 juillet 2010 à 15:14:16

                            Citation : candide

                            Citation : Colb-Seton

                            Salut, moi j'ai fait ça :



                            Passe pas les tests ;)


                            Je m'en doutais bien puisque l'énoncé stipule que b est inclus dans l'intervalle. Moi je l'ai exclu volontairement.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              19 juillet 2010 à 15:16:49

                              EDIT : Je ne comprend pas mon erreur...

                              Citation : Prologin


                              Sortie de débogage :
                              File "/tmp/tmp.JKGns18097.py", line 15
                              print(i, end=' ')
                              ^
                              SyntaxError: invalid syntax

                              • Partager sur Facebook
                              • Partager sur Twitter
                                19 juillet 2010 à 15:28:39

                                Citation : nicodec57

                                Mon code est-il "bon" ?



                                Stricto sensu, non car tu ne suis pas exactement les consignes de l'énoncé. Mais une fois que tu auras réglé ce petit détail, oui, il est bon (bien qu'un peu compliqué quand même).



                                Citation : nicodec57


                                Peut tu m'expliquer d'avantage. Je n'ai pas trouvé le lien :-°




                                Faut être inscrit sur le site avec une adresse email valide. Dans la page de l'énoncé de chaque exo, tu vas tout en bas au lien Soumettre un fichier source, puis dans le formulaire, tu colles ton code, tu choisis ton langage (Python et forcément 2.6 pas de Python 3 pour l'instant), tu lances et le serveur va te dire combien de tests tu as passés, accompagné d'un message. Attention, la moindre erreur sur la façon de capturer les entrées et tu auras faux, c'est ce que j'ai trouvé le plus chiant à comprendre (bon c'était en C où les entrées plus sont pénibles).
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  19 juillet 2010 à 15:31:43

                                  Oui j'ai finalement trouvé et j'obtiens donc une erreur sur end=" " dans le print. Sans doute car c'est Python 2 ?
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    19 juillet 2010 à 15:33:27

                                    Citation : nicodec57

                                    Oui j'ai finalement trouvé et j'obtiens donc une erreur sur end=" " dans le print. Sans doute car c'est Python 2 ?



                                    Oui, comme c'est indiqué sur leur site, c'est du Python 2.5 (même pas 2.6 donc).
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Anonyme
                                      19 juillet 2010 à 15:34:07

                                      Je ne sais pas si il est accepté par prologin

                                      >>> def f(x):
                                      	return x%2
                                      
                                      >>> impair=lambda x, y:filter(f, range(x, y+1))
                                      >>> impair(42, 51)
                                      [43, 45, 47, 49, 51]
                                      


                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        19 juillet 2010 à 15:35:40

                                        Citation : fred1599

                                        Je ne sais pas si il est accepté par prologin

                                        >>> def f(x):
                                        	return x%2
                                        
                                        >>> impair=lambda x, y:filter(f, range(x, y+1))
                                        >>> impair(42, 51)
                                        [43, 45, 47, 49, 51]
                                        





                                        Y'a pas d'erreur signalé.
                                        Je ne vois pas le problème dans mon code o_O
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          19 juillet 2010 à 15:44:34

                                          Citation : fred1599

                                          Je ne sais pas si il est accepté par prologin




                                          A des détails près, je pense que oui. Mais franchement je trouve que c'est compliqué que d'aller chercher filter (qui en plus n'existe plus sous cette forme en Python 3) alors qu'une liste en compréhension est tellement plus simple (où à la rigueur une genexp).
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            19 juillet 2010 à 16:22:39

                                            Voici ma solution:

                                            def impaire(x, y):
                                                for i in range(42, 51):
                                            	if(i%2 != 0):
                                            		print("Les nombres impairs:", i, end = ' ')
                                            
                                            
                                            
                                            x = int(input("Entrez un premier nombre\n=>"))
                                            y = int(input("Entrez un second nombre\n=>"))
                                                    
                                            impaire(x, y)
                                            


                                            EDIT: Pourquoi mon code est il très diférent du votre ? :euh:
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              19 juillet 2010 à 16:40:37

                                              Citation : realmagma


                                              def impaire(x, y):
                                                  for i in range(42, 51):
                                              




                                              T'as oublié x et y.
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                19 juillet 2010 à 16:46:45

                                                Citation : candide

                                                Citation : realmagma


                                                def impaire(x, y):
                                                    for i in range(42, 51):
                                                




                                                T'as oublié x et y.




                                                Oups :D

                                                Je re-post mon code. Est-il bon ?

                                                def impaire(x, y):
                                                    for i in range(x, y): #Merci Candide
                                                	if(i%2 != 0):
                                                		print("Les nombres impairs:", i, end = ' ')
                                                
                                                
                                                
                                                x = int(input("Entrez un premier nombre\n=>"))
                                                y = int(input("Entrez un second nombre\n=>"))
                                                        
                                                impaire(x, y)
                                                


                                                EDIT: J'avais oublié les balises, mais personne n'a rien vu :-°
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  19 juillet 2010 à 16:50:41

                                                  Citation : realmagma


                                                  Je re-post mon code. Est-il bon ?



                                                  Regarde bien l'énoncé, les bornes sont incluses.
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    19 juillet 2010 à 17:44:25

                                                    Je comprends aucun code :euh:

                                                    En réfléchissant bien, j'en ai déjà compris un. J'ai bien assimilé le code de realmagma
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      19 juillet 2010 à 17:52:32

                                                      Citation : nicodec57

                                                      Je comprends aucun code :euh:


                                                      Ça devrait aller mieux après avoir lu ça si l'anglais ne te gène pas :
                                                      http://docs.python.org/tutorial/contro [...] #lambda-forms
                                                      http://docs.python.org/tutorial/datast [...] omprehensions
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        19 juillet 2010 à 17:56:19

                                                        Ha oui bien ! Je comprends grâce aux exemples qui sont très clairs :)
                                                        Merci.
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                        Anonyme
                                                          19 juillet 2010 à 17:57:18

                                                          Bonjour, il y a des personnes qui apportent des réponses difficiles pour un exercice très facile !
                                                          voici ma solution:

                                                          def impair(n1, n2):
                                                              r =""
                                                              for i in range(n1, n2 +1):
                                                                  if i %2:
                                                                      r += str(i) +" "
                                                              return r
                                                          


                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            19 juillet 2010 à 18:00:40

                                                            Citation : vieks

                                                            Bonjour, il y a des personnes qui apportent des réponses difficiles pour un exercice très facile !



                                                            Ou pas. Les list compréhension son très simple à comprendre quand on connait donc c'est aussi difficile à assimiler qu'un ternaire (par exemple).

                                                            Et dans ton code, c'est range de n1 à n2 + 1 car n2 est inclue.
                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                            Anonyme
                                                              19 juillet 2010 à 18:14:49

                                                              Citation : nicodec57


                                                              Je trouve cet exercice très bien pour les débutants. Vous aurez besoin essentiellement de ces notions :

                                                              * Les structures conditionnelles
                                                              * Les boucles
                                                              * Les fonctions
                                                              * Les listes et tuples (1/2) (selon la méthode)



                                                              EPonix >>>C'est sure c'est très bien d'apporter des solutions plus difficiles, ca rend le sujet plus intéressant mais tu ne peux pas assurer qu'un code utilisant les "list compréhension" est dans le bagage d'un débutant :)
                                                              • 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