Partage
  • Partager sur Facebook
  • Partager sur Twitter

Des questions sur le Python

[Exercices] Grand-écart et triangle de Pascal

Sujet résolu
    20 juillet 2010 à 20:59:25

    Bonjour,

    Je voudrais avoir quelques informations concernant les listes.
    Tout d'abord, la boucle for est exclusivement réservé aux chaines de caractères et aux listes ? Elle ne peut avoir le même effet qu'en C ?

    Je suis tombé sur certains exercices que je ne parviens pas à résoudre.
    Je n'arrive pas à passer d'un chiffre à un autre dans la liste pour additionner... J'ai beaucoup de mal pour réaliser le tableau de Pascal et le Grand-Ecart... Et pourtant j'ai cherché :(

    Je suis encore au chapitre des Liste à puces (1/2).

    Merci de votre aide,
    Nicolas.
    • Partager sur Facebook
    • Partager sur Twitter
      20 juillet 2010 à 21:03:29

      Qu'est ce que tu ne comprends pas exactement sur les listes ? Tu peux me donner des exemples de ce que tu n'arrives pas à reproduire comme commande sur une liste ?
      • Partager sur Facebook
      • Partager sur Twitter
        20 juillet 2010 à 21:15:46

        Voici mes "pistes de recherches" et encore :euh:

        Grand Ecart :

        import os
        
        def plusGrandEcart(tableau, N):
        	liste = N.split(" ") # On crée une liste contenant les caractères entrés (str)
        	MAX = max(liste)
        	MIN = min(liste)
        	
        	indiceMax = liste.index(MAX)
        	indiceMin = liste.index(MIN)
        	
        	# On convertie toutes les données utiles en nombre
        	MAX = int(MAX)
        	MIN = int(MIN)
        	indiceMax = int(indiceMax)
        	indiceMin = int(indiceMin)
        	
        	if indiceMax==indiceMin+1 or indiceMax==indiceMin-1 or indiceMin==indiceMax+1 or indiceMin==indiceMax-1:
        		print(MAX-MIN)
        
        		
        tableau = int(input())
        N = input()		
        
        plusGrandEcart(tableau, N)
        
        os.system("pause")
        



        Et pour reproduire le Tableau de Pascal (du grand n'importe quoi...) :

        p = 0
        boucle = 0
        liste = [1, 1]
        print(liste)
        
        
        while len(liste)<10:
        		ajout = liste[p] + liste[p+1]
        		p+=1
        		liste.insert(p, ajout)
        		print(liste)
        



        J'arrive pas trop à expliquer mais je trouve pas la "clé" pour parcourir nombre par nombre de la ligne x.
        Dans ce cas, d'additionner dans un premier temps le 1+1 puis le 1+2 et le 2+1 de la ligne 2 et d'insérer le résultat dans la ligne 3...
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          20 juillet 2010 à 21:44:47

          Bonjour.

          Déjà, c'est très bien de t'entraîner ainsi sur des exercices un peu abstraits.

          Pour le Grand-Écart, tu réfléchis mal : ça n'est pas parce que deux nombres consécutifs sont séparés par le plus grand écart de la liste qu'ils sont obligatoirement l'un le maximum et l'autre le minimum de la liste, il ne faut donc pas utiliser les deux fonctions qui te renvoient ces nombres. Tu ne pourras pas échapper à l'écriture d'une boucle ;) .

          Commence par ça, on verra l'autre après.

          Edit : rajouter du mot "consécutifs" pour les gens qui ne prennent pas le temps de lire.
          • Partager sur Facebook
          • Partager sur Twitter
            20 juillet 2010 à 21:54:09

            Pour le tableau de Pascal, un indice :

            chaque nombre d'une ligne est la somme du nombre supérieur et du nombre supérieur gauche dans la ligne PRECEDENTE.
            Ton programme doit donc travailler sur 2 lignes et non sur une seule.

            Commence par voir le message de iPoulet, mais à mon avis tes problémes sont plus de la...définition de probléme justement, que de l'utilisation des listes.

            • Partager sur Facebook
            • Partager sur Twitter
              20 juillet 2010 à 22:43:41

              Citation : iPoulet

              Tu ne pourras pas échapper à l'écriture d'une boucle.



              Oui mais c'une while ?

              Citation : nicodec57


              Je voudrais avoir quelques informations concernant les listes.
              Tout d'abord, la boucle for est exclusivement réservé aux chaines de caractères et aux listes ? Elle ne peut avoir le même effet qu'en C ?


              Citation : Lexileduval


              Commence par voir le message de iPoulet, mais à mon avis tes problémes sont plus de la...définition de probléme justement, que de l'utilisation des listes.



              Oui je vais revoir mon problème.
              Le problème vient du fait de la réflexion sur le sujet ?
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                21 juillet 2010 à 0:05:39

                Ouais.

                Oh, pour imiter le for du C en Python, utilise un truc du genre for i in range(N). Tape help(range) dans un shell Python pour avoir plus d'aide.
                • Partager sur Facebook
                • Partager sur Twitter
                  21 juillet 2010 à 0:16:10

                  Citation : iPoulet

                  Bonjour.

                  Déjà, c'est très bien de t'entraîner ainsi sur des exercices un peu abstraits.

                  Pour le Grand-Écart, tu réfléchis mal : ça n'est pas parce que deux nombres sont séparés par le plus grand écart de la liste qu'ils sont obligatoirement l'un le maximum et l'autre le minimum de la liste, il ne faut donc pas utiliser les deux fonctions qui te renvoient ces nombres. Tu ne pourras pas échapper à l'écriture d'une boucle ;) .

                  Commence par ça, on verra l'autre après.

                  • Partager sur Facebook
                  • Partager sur Twitter
                    21 juillet 2010 à 0:27:25

                    Citation : iPoulet


                    Oh, pour imiter le for du C en Python, utilise un truc du genre for i in range(N).



                    Ha ? Une boucle for avec range est l'équivalent du for en C :o
                    • Partager sur Facebook
                    • Partager sur Twitter
                      21 juillet 2010 à 0:39:39

                      // Environ ça, ça fait longtemps que j'ai pas fait de C
                      for (int i = 0; i < 10; i++) {
                          printf("%d", i);
                      }
                      


                      for i in range(10):
                          print(i)
                      


                      Ça devrait être équivalent si je ne me trompe pas. En gros, la boucle for en python permet de passer sur tous les éléments d'un truc séquentiel (liste, chaîne de caractères par exemple). La fonction range(n) renvoit une liste composée de nombres allant de 1 à n-1, on peut donc utiliser une boucle for pour lire la liste élément par élément.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        21 juillet 2010 à 0:42:00

                        Oui, ok je vois ;)
                        Bon demain je me repenche sur le Grand Ecart avec un for
                        • Partager sur Facebook
                        • Partager sur Twitter
                          21 juillet 2010 à 0:57:20

                          Citation : nicodec57


                          Je voudrais avoir quelques informations concernant les listes.
                          Tout d'abord, la boucle for est exclusivement réservé aux chaines de caractères et aux listes ?



                          Oui, enfin aux itérables plus généralement.


                          Citation : nicodec57

                          Elle ne peut avoir le même effet qu'en C ?



                          le for du C et de Python n'ont que peu en connu, mis à part l'idiome for (i=0;i<100;i++) par rapport à for i in range(100) . D'ailleurs, en C, un for c'est un while déguisé.


                          Citation : nicodec57


                          Je n'arrive pas à passer d'un chiffre à un autre dans la liste pour additionner... J'ai beaucoup de mal pour réaliser le tableau de Pascal et le Grand-Ecart... Et pourtant j'ai cherché :(



                          C'est une question de tournure d'esprit et de feeling. On peut très bien être programmeur et incapable de faire ça (et inversement d'ailleurs).


                          Citation : nicodec57

                          Voici mes "pistes de recherches" et encore :euh: .



                          Ce qui est fondamental dans ce genre d'exos, c'est d'être capable, hors de tout langage de programmation, de bien détailler pas à pas ce que l'exo demande, imagine par exemple que tu doive donner des instructions de réalisation à ton petit frère. Ensuite, il faut singer (paraphraser) ce comportement avec le langage de programmation. Surtout ne cherche pas élégant, ne cherche pas direct, cherche bête, cherche KISS quoi !




                          Citation : nicodec57

                          Citation : iPoulet

                          Tu ne pourras pas échapper à l'écriture d'une boucle.



                          Oui mais c'une while ?



                          C'est un détail. avant de regarder for ou while, essaye de comprendre où est le phénomène de répétition dans le problème à résoudre.


                          Citation : nicodec57


                          Le problème vient du fait de la réflexion sur le sujet ?



                          Ce qui se conçoit bien se programme clairement ;)

                          Citation : nicodec57

                          Citation : iPoulet


                          Oh, pour imiter le for du C en Python, utilise un truc du genre for i in range(N).



                          Ha ? Une boucle for avec range est l'équivalent du for en C :o



                          Certaines boucles for.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            21 juillet 2010 à 10:15:40

                            Citation : iPoulet

                            ça n'est pas parce que deux nombres sont séparés par le plus grand écart de la liste qu'ils sont obligatoirement l'un le maximum et l'autre le minimum de la liste.


                            Je ne saisis pas trés bien ta logique, il me semble que si l'écart entre deux éléments d'un ensemble est supérieur aux écarts entre tout les éléments de cet ensemble pris deux à deux, alors ces deux éléments composent le minimum et le maximimum.

                            Je me trompe ?
                            • Partager sur Facebook
                            • Partager sur Twitter
                            Anonyme
                              21 juillet 2010 à 10:18:12

                              Je n'y croyais pas Shang-Tsung, mais j'ai bien compris comme toi. :)

                              Si tu prends le minimum de la liste et le maxi de la liste, tu auras bien le plus gd ecart de la liste.

                              Moi qui croyait être le seul, je commençais à avoir des doutes.

                              Peut-être ai-je mal compris ce que veut dire iPoulet.

                              • Partager sur Facebook
                              • Partager sur Twitter
                              Anonyme
                                21 juillet 2010 à 10:22:43

                                Citation : Shang-Tsung

                                Citation : iPoulet

                                ça n'est pas parce que deux nombres sont séparés par le plus grand écart de la liste qu'ils sont obligatoirement l'un le maximum et l'autre le minimum de la liste.


                                Je ne saisis pas trés bien ta logique, il me semble que si l'écart entre deux éléments d'un ensemble est supérieur aux écarts entre tout les éléments de cet ensemble pris deux à deux, alors ces deux éléments composent le minimum et le maximimum.

                                Je me trompe ?



                                Oui, tu te trompes, regarde l'exemple du site : les maximum et minimum sont respectivement 10 et 1, et pourtant l'écart n'est pas 9. On ne peut donc pas procéder ainsi. Vois ça comme des marches qui montent et qui descendent, ça n'est pas parce que tu veux atteindre la plus haute marche que tu dois faire le plus grand pas (il peut y avoir plein de marches peu espacées pour y arriver).

                                Ici on parle d'écart entre deux éléments consécutifs ;) .
                                • Partager sur Facebook
                                • Partager sur Twitter
                                Anonyme
                                  21 juillet 2010 à 10:26:16

                                  Citation

                                  Ici on parle d'écart entre deux éléments consécutifs



                                  Euh non, pas dans l'exercice proposé de prologin il me semble.


                                  Autant pour moi, je me suis gouré
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    21 juillet 2010 à 10:28:59

                                    Ah tu t'es donc mal exprimé iPoulet, parce que je n'ai pas lu le sujet en entier, mais j'ai surpris ta phrase en plein milieu qui m'a choquée.

                                    Maintenant que j'ai suivi le lien de nicodec57 j'ai compris dans quel mesure tu disais ça et que le hashish ne t'à pas encore embrumé le cerveau (à la bonne heure).
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      21 juillet 2010 à 11:15:50

                                      Citation : Shang-Tsung

                                      Ah tu t'es donc mal exprimé iPoulet, parce que je n'ai pas lu le sujet en entier,



                                      fallait oser celle-là :lol:
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        21 juillet 2010 à 12:34:53

                                        Où est le problème candide ?

                                        Tu vas pas me faire croire que tu suis tout les liens de tout les posts ?
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          21 juillet 2010 à 12:51:53

                                          Je suis en train d'avancer sur mon problème, mais il y a une chose que je ne saisis pas...

                                          Python 3.1.2 (r312:79149, Mar 21 2010, 00:41:52) [MSC v.1500 32 bit (Intel)] on
                                          win32
                                          Type "help", "copyright", "credits" or "license" for more information.
                                          >>> let = input()
                                          4 2 3 5 10 6 4 9 1 3
                                          >>> let
                                          '4 2 3 5 10 6 4 9 1 3'
                                          >>> let = let.split(" ")
                                          >>> let
                                          ['4', '2', '3', '5', '10', '6', '4', '9', '1', '3']
                                          >>> max(let)
                                          '9'
                                          >>>
                                          


                                          Le max(let) devrait être égale à 10, non ? :euh:
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                          Anonyme
                                            21 juillet 2010 à 12:53:23

                                            Tu compares des lettres dans une liste au lieu de nombres
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              21 juillet 2010 à 13:00:20

                                              Oui je m'en suis douté, pour transformer la liste let , qui comporte des lettres, en nombre il faut faire une boucle for ?

                                              J'ai réussi à transformer 2 valeurs contenus dans une liste :

                                              avoir les deux valeurs entrées sur la même ligne
                                              chaine = input()
                                              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])
                                              


                                              J'ai essayé ceci :
                                              >>> let
                                              ['4', '2', '3', '5', '10', '6', '4', '9', '1', '3']
                                              >>> int = []
                                              >>> int
                                              []
                                              >>> for i in let:
                                              ...     nb = int(i)
                                              ...     int.append(nb)
                                              ...
                                              Traceback (most recent call last):
                                                File "<stdin>", line 2, in <module>
                                              TypeError: 'list' object is not callable
                                              >>> for i in let:
                                              ...     nb = int(let[i])
                                              ...     int.append(nb)
                                              ...
                                              Traceback (most recent call last):
                                                File "<stdin>", line 2, in <module>
                                              TypeError: list indices must be integers, not str
                                              >>> for i in let:
                                              ...     print(i)
                                              ...
                                              4
                                              2
                                              3
                                              5
                                              10
                                              6
                                              4
                                              9
                                              1
                                              3
                                              >>> for i in let:
                                              ...     int.append(i)
                                              ...
                                              >>> int
                                              ['4', '2', '3', '5', '10', '6', '4', '9', '1', '3']
                                              >>> for i in let:
                                              ...     i = int(i)
                                              ...     print(i)
                                              ...
                                              Traceback (most recent call last):
                                                File "<stdin>", line 2, in <module>
                                              TypeError: 'list' object is not callable
                                              >>> for i in let:
                                              ...     r = int(i)
                                              ...
                                              Traceback (most recent call last):
                                                File "<stdin>", line 2, in <module>
                                              TypeError: 'list' object is not callable
                                              >>>
                                              
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                              Anonyme
                                                21 juillet 2010 à 13:08:42

                                                >>> let=['4', '2', '3', '5', '10', '6', '4', '9', '1', '3']
                                                >>> res=[]
                                                >>> for i in let:
                                                        res.append(int(i))
                                                
                                                        
                                                >>> print res
                                                [4, 2, 3, 5, 10, 6, 4, 9, 1, 3]


                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  21 juillet 2010 à 13:15:28

                                                  voire :

                                                  >>> let=['4', '2', '3', '5', '10', '6', '4', '9', '1', '3']
                                                  >>> listeEntier = [int(i) for i in let]
                                                  >>> listeEntier
                                                  [4, 2, 3, 5, 10, 6, 4, 9, 1, 3]
                                                  
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    21 juillet 2010 à 13:34:44

                                                    Oui, c'est pourtant ce que j'avais fais o_O

                                                    Citation : nicodec57


                                                    J'ai essayé ceci :

                                                    >>> let
                                                    ['4', '2', '3', '5', '10', '6', '4', '9', '1', '3']
                                                    >>> int = []
                                                    >>> int
                                                    []
                                                    >>> for i in let:
                                                    ...     nb = int(i)
                                                    ...     int.append(nb)
                                                    ...
                                                    Traceback (most recent call last):
                                                      File "<stdin>", line 2, in <module>
                                                    TypeError: 'list' object is not callable
                                                    


                                                    En fermant la console et ré ouvrant ça fonctionne...
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                    Anonyme
                                                      21 juillet 2010 à 13:38:59

                                                      >>> int = []
                                                      


                                                      Interdit!!!

                                                      Pourquoi?

                                                      Pour ça !

                                                      nb = int(i)
                                                      


                                                      Tu as remplacé la fonction int() par une liste vide.

                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        21 juillet 2010 à 13:46:58

                                                        Ok d'accord !
                                                        Je ferais attention la prochaine fois ;)

                                                        J'ai un problème lors de l'appel de la fonction :o
                                                        Je vais rechercher cette après mdi, voici ma progression :-°

                                                        import os
                                                        from math import fabs
                                                        
                                                        def plusGrandEcart(tableau,N):
                                                        	liste = N.split(" ") # On crée une liste contenant les caractères entrés (str)
                                                        	operation = [] # On crée une liste vide qui contiendra les numéros 
                                                        	resultat = [] # On crée une liste vide qui contiendra les resultats 
                                                        	
                                                        	for i in liste: # On convertis toutes les entrées en nb
                                                        		nb = int(i)
                                                        		operation.append(nb)
                                                        	
                                                        	for i in range(len(operation)):
                                                        		r = operation[i] - operation[i+1]
                                                        		r = fabs(r) # On renvoit la valeur absolue
                                                        		resultat.append(r) # On ajoute dans la liste vide
                                                        		
                                                        	max = max(resultat)
                                                        	print(max)
                                                        	
                                                        tableau = int(input())
                                                        N = input()		
                                                        
                                                        plusGrandEcart(tableau,N)
                                                        
                                                        os.system("pause")
                                                        

                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                        Anonyme
                                                          21 juillet 2010 à 13:58:08

                                                          Je t'ai dis qu'il ne fallait pas utiliser les fonctions comme nom de variable

                                                          max = max(resultat)
                                                          


                                                          Sinon c'est bon, ca doit fonctionner quand même je pense, j'ai pas testé.

                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            21 juillet 2010 à 13:59:31

                                                            Dans ce cas, ce n'est pas ça qui causerait le problème. Par contre, la ligne qui me parait bizarre, c'est ça : tableau = int(input()) : ce n'est pas plutôt N qu'on doit convertir en entier après l'avoir lu ? (et dans ce cas, tu lis les choses dans le mauvais sens : N est donné en premier d'après l'énoncé)
                                                            Oups, désolé, j'ai inversé tes noms de variables je crois.

                                                            Par contre, tu dis que tu as un problème lors de l'appel de ta fonction. Ce serait pas mal de détailler quel problème (copier le message d'erreur, par exemple)
                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                            Anonyme
                                                              21 juillet 2010 à 14:02:43

                                                              Petite question nicodec57, tu as fait du php avant d'apprendre Python ?
                                                              • Partager sur Facebook
                                                              • Partager sur Twitter

                                                              Des questions sur le Python

                                                              × 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