Partage
  • Partager sur Facebook
  • Partager sur Twitter

obtenir une liste à deux dimensions

Sujet résolu
    29 février 2016 à 18:12:12

    Bonjour, on me demande d'écrire une fonction qui reçoit un entier positif "n" comme paramètre et retourne une table de multiplication n par n sous forme de liste à deux dimensions. Par exemple, si l'entier positif est 4, alors mon programme doit retourner une liste à deux dimensions avec 4 lignes et 4 colonnes comme cela :

    [ [ 1, 2, 3, 4],

      [ 2, 4, 6, 8],

      [ 3, 6, 9, 12],

      [4, 8, 12, 16] ]

    Mon code donne bien les bons nombres, bien rangés, mais comment faire pour mettre tous les crochets et les virgules en fin de ligne? Merci.

    n=int(input("Enter a number: "))
    for i in range(1,n+1):
        for k in range(1,n+1):
            print(i*k, end="\t")
    print("\n")
    
    Enter a number: 4
    1	2	3	4	
    
    2	4	6	8	
    
    3	6	9	12	
    
    4	8	12	16



    • Partager sur Facebook
    • Partager sur Twitter
      29 février 2016 à 18:32:01

      bonjour,

      insere une ligne entre 1 et 2 print ("[")

      rajoute une ligne apres la 3 pour le crochet de fin en dehors de la boucle for k in ....

      doit tu aussi avoir les virgules ?

      @+

      • Partager sur Facebook
      • Partager sur Twitter
      http://sinclair.recreatedzxspectrum.com/index.php
        29 février 2016 à 18:57:57

        Nan, ce n'est pas ça Dark :lol:. Là on ne veut pas créer notre propre affichage, ce qu'on veut c'est que la fonction RENVOIE une liste de listes. Autrement dit, on ne DOIT PLUS utiliser print.

        print c'est bien pour afficher quelque chose dans la console, MAIS on ne récupère RIEN avec. Pour récupérer quelque chose d'une fonction, on utilise le mot-clé return. Et je suppose que tu es dans la semaine d'apprentissage des listes, donc la méthode intéressante est append. Elle permet d'ajouter UN élément à une liste.

        Voici 2 exemples pour l'utilisation des listes:

        #On part TOUJOURS d'une initialisation
        lst = []
        for lettre in "ABCD":
            lst.append(i*2)
        
        print(lst)
        
        
        #On peut aussi créer une liste de listes
        #Il faut bien comprendre où placer la création de la sous-liste
        lst = []
        for lettre in "ABCD":
            ss_lst = []
            for val in range(3, 6):
                ss_lst.append(lettre*val)
            lst.append(ss_lst)
        
        print(lst)


        Et pour l'utilisation du mot-clé return:

        #SANS RETURN
        def sans_return(iterable):
            """Cette fonction affiche seulement le 1er élément d'un itérable"""
            print(iterable[0])
        
        val = sans_return("abcd")
        print(val)  #val n'a pas récupérée la valeur
        
        
        #AVEC RETURN
        def avec_return(iterable):
            """Cette fonction récupère seulement le 1er élément d'un itérable"""
            return iterable[0]
        
        val = avec_return("abcd")
        print(val)  #val a bien récupérée la valeur. Je peux donc la réutiliser 
        print(val*4)


        Dans le premier cas (sans_return), même si le résultat s'affiche dans la console la variable val n'a rien récupérée (elle vaut None). Donc on ne peut rien en faire. À l'inverse, dans le second cas (avec_return) la variable val récupère bien quelque chose (ici la lettre "a"). Donc on peut la manipuler et faire d'autres traitements avec ;)

        -
        Edité par Olygrim 29 février 2016 à 20:05:36

        • Partager sur Facebook
        • Partager sur Twitter
        Précepte: Le mieux est l'ennemi du bien
          29 février 2016 à 19:10:49

          Mince j ai mal lu l énoncé !
          • Partager sur Facebook
          • Partager sur Twitter
          http://sinclair.recreatedzxspectrum.com/index.php
          Anonyme
            29 février 2016 à 19:37:07

            >>> from pprint import pprint
            >>> 
            >>> def table(n):
            ...     results = []
            ...     for a in range(1, n + 1):
            ...         line = []
            ...         for b in range(1, n + 1):
            ...             line.append(a * b)
            ...         results.append(line)
            ...     return results
            ... 
            >>> ls = table(10)
            >>> pprint(ls)
            [[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
             [2, 4, 6, 8, 10, 12, 14, 16, 18, 20],
             [3, 6, 9, 12, 15, 18, 21, 24, 27, 30],
             [4, 8, 12, 16, 20, 24, 28, 32, 36, 40],
             [5, 10, 15, 20, 25, 30, 35, 40, 45, 50],
             [6, 12, 18, 24, 30, 36, 42, 48, 54, 60],
             [7, 14, 21, 28, 35, 42, 49, 56, 63, 70],
             [8, 16, 24, 32, 40, 48, 56, 64, 72, 80],
             [9, 18, 27, 36, 45, 54, 63, 72, 81, 90],
             [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]]
            >>> 
            >>> ls = table(4)
            >>> pprint(ls)
            [[1, 2, 3, 4], [2, 4, 6, 8], [3, 6, 9, 12], [4, 8, 12, 16]]
            >>> pprint(ls, width=20)
            [[1, 2, 3, 4],
             [2, 4, 6, 8],
             [3, 6, 9, 12],
             [4, 8, 12, 16]]
            
            • Partager sur Facebook
            • Partager sur Twitter
              29 février 2016 à 19:41:22

              Olygrim, je savais pour le return : c'est quelqu'un du forum qui me l'a dit, c'est peut-être même toi - je ne me souviens plus qui. Mais je croyais que dans ce cas particulier, je pouvais mettre "print". J'avais tort.

              Je vais donc essayer de partir d'une liste vide avec des sous-listes. Tu m'as donné pas mal d'indices. Merci.

              • Partager sur Facebook
              • Partager sur Twitter
                29 février 2016 à 19:48:23

                Pendant que j'écrivais à Olygrim, je n'avais pas vu que celthon avait fait mon travail...Merci celthon, tu es trop sympa.
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  29 février 2016 à 19:52:37

                  Mon but n'était pas de spoil la réponse. Tu avais déjà l'algorithme avec les 2 for imbriqués. Je voulais présenter la fonction pprint qui permet d'afficher les objets de manière un petit peu plus jolie. Elle a sûrement été utilisée pour l'affichage de l'énoncé.

                  • Partager sur Facebook
                  • Partager sur Twitter
                    29 février 2016 à 20:24:25

                    celthon a écrit:

                    Mon but n'était pas de spoil la réponse. Tu avais déjà l'algorithme avec les 2 for imbriqués. Je voulais présenter la fonction pprint qui permet d'afficher les objets de manière un petit peu plus jolie. Elle a sûrement été utilisée pour l'affichage de l'énoncé.


                    Merci pour l info
                    • Partager sur Facebook
                    • Partager sur Twitter
                    http://sinclair.recreatedzxspectrum.com/index.php

                    obtenir une liste à deux dimensions

                    × 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