IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

créer une fonction recevant une liste L et renvoyant la liste M


Sujet :

Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    pcsi
    Inscrit en
    Octobre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : pcsi

    Informations forums :
    Inscription : Octobre 2015
    Messages : 3
    Points : 1
    Points
    1
    Par défaut créer une fonction recevant une liste L et renvoyant la liste M
    bonjour

    je suis novice dans le langage python.

    je souhaiterai avoir une aide pour démarrer mon DM

    si L=(a0,a1,...,an-1) alors la ligne renvoyée sera M=(a0,a0+a1,a1+a2,....,an-2+an-1,an-1)

    je n'arrive pas à écrire cette fonction, ni à voir par ou commencer

    merci

  2. #2
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    Tu as un cours, non ?
    Si oui, commence par là.
    Sinon, il y a d'excellents tutos, par exemple ici :
    http://python.developpez.com/cours/apprendre-python3/
    Pas d'aide par mp.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    pcsi
    Inscrit en
    Octobre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : pcsi

    Informations forums :
    Inscription : Octobre 2015
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    le DM est une introduction au cours que n'avons pas encore eu

    merci pour ta réponse

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur banc de test
    Inscrit en
    Mai 2014
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur banc de test
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 199
    Points : 482
    Points
    482
    Par défaut
    Bonjour,

    Avant même de penser à la syntaxe de programmation vous devriez d'abord réfléchir à l’algorithme, la philo à appliquer afin d'obtenir le tableau M à partir de L.

    L=(a0, a1,..., an-1)

    M=(a0, a0+a1, a1+a2,...., an-2+an-1, an-1)

    Ensuite il suffit de rechercher la syntaxe python pour manipuler les tableaux/listes.

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Il faut commencer par créer une liste:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> L = list(range(5))
    >>> L
    [0, 1, 2, 3, 4]
    >>>
    puis la parcourir pour sortir (0, 1), (1, 2), (2, 3),...
    Ce qui peut se faire en 2 étapes:
    la parcourir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> for x in range(len(L)):
    ...     print (x, L[x])
    ...
    0 0
    1 1
    2 2
    3 3
    4 4
    >>>
    Pour "sortir" l'élément courant et le suivant, il faut modifier un peu notre boucle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> for x in range(len(L)-1):
    ...     print(x, L[x], L[x+1])
    ...
    0 0 1
    1 1 2
    2 2 3
    3 3 4
    >>>
    pour le reste, à vous de jouer.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    pcsi
    Inscrit en
    Octobre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : pcsi

    Informations forums :
    Inscription : Octobre 2015
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    j'ai:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    n=8
    L=list(range(n))
    for l in L:
        if l>0:
            p=(l-1)
            G=l+p
        if l==0:
             G=0
        print(G)
    G correspond a une partie de la liste M, il me manque le derniers termes, comment faire ?
    merci.

  7. #7
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    En poussant un peu plus loin ce qu'a remarqué YCL-1, la liste résultat est la liste constituée avec la somme des termes de la même liste décalée de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
         a0 , a1 , ... , an-2 , an-1
    a0 , a1 , a2 , ... , an-1
    du coup, crée 2 listes auxiliaires, et fait la somme membre à membre (indice par indice) pour créer ta liste résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> zero_gauche = [0] + L
    >>> zero_droite = L + [0]
    En math, on aime bien les indices (je te laisse chercher). En python, si l'on peut s'en passer ...

    Plus tard, tu pourras aller voir zip et les comprehension lists et ça pourra se résumer à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> L=list(range(8))
    >>> resultat = [ g+d for g, d in zip([0]+L, L+[0]) ]
    >>> print(resultat)
    [0, 1, 3, 5, 7, 9, 11, 13, 7]
    "La simplicité ne précède pas la complexité, elle la suit." - Alan J. Perlis
    DVP ? Pensez aux cours et tutos, ainsi qu'à la FAQ !

  8. #8
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    salut,

    @plxpy, tu le fais toi même remarquer, la liste va de a0 à an-1, et non an
    c'est ce qu'a mis wiztricks plus haut en fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> for x in range(len(L)-1):
    ...     print(x, L[x], L[x+1])
    du coup quand on arrive à an, an+1 existe, c'est le dernier élément de la liste L

    (ce qu'on peut du coup écrire aussi M = map(lambda (x,y): x+y, zip(L, L[1:])) accessoirement)

  9. #9
    Membre éprouvé
    Homme Profil pro
    Aucune activité
    Inscrit en
    Novembre 2011
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Aucune activité

    Informations forums :
    Inscription : Novembre 2011
    Messages : 505
    Points : 926
    Points
    926
    Par défaut
    Bonsoir,
    @BufferBob: je pense qu'il manque le dernier terme dans ce cas, non?
    La solution présentée par plxpy rajoute un élément à chaque liste (un 0 avant et un 0 après) afin de créer deux listes décalées mais de même longueur. Ce qui permet de boucler sur la longueur totale et de récupérer la dernière somme.

    Je préférerais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> n = 8
    >>> lst = [x for x in range(n)]
    >>> M = [x+y for x, y in zip(lst, lst[1:])] + [lst[-1]]
    >>> M
    [1, 3, 5, 7, 9, 11, 13, 7]
    >>>
    ou même:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> n = 8
    >>> lst = [x for x in range(n)]
    >>> M = map(lambda x: sum(x), zip(lst, lst[1:]+[0]))
    >>> print(*M)
    1 3 5 7 9 11 13 7
    >>>
    Clodion

  10. #10
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    Citation Envoyé par Clodion Voir le message
    je pense qu'il manque le dernier terme dans ce cas, non?
    oui en fait au temps pour moi, l'énoncé dit qu'on a une liste L[a0, a1, a2, ..., an-2, an-1] qui doit générer une liste M[a0+0, a1+a0, a2+a1, ..., an-1+an-2, 0+an-1]
    c'est bien ce que disait plxpy, j'ai besoin de sommeil

  11. #11
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    Citation Envoyé par 1997gaetan Voir le message
    j'ai:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    n=8
    L=list(range(n))
    for l in L:
        if l>0:
            p=(l-1)
            G=l+p
        if l==0:
             G=0
        print(G)
    G correspond a une partie de la liste M, il me manque le derniers termes, comment faire ?
    merci.
    J'y reviens car tu penses que ton code est presque bon, alors qu'il est foncièrement faux !
    A l'évidence, dans ta boucle for, tu mélanges indices et valeurs de la liste !

    C'est vrai qu'un premier exemple avait été pris en initialisant la liste L avec range : dans ce cas, et dans ce cas uniquement, indices et valeurs se confondent mais c'est un cas très particulier (qui du coup te fait croire que ton code marche "presque").

    Pour t'en convaincre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    >>> L = [ 8, 1, 4, 42, 17 ]
    >>> for i in L:
    ...     print(i)
    ... 
    8
    1
    4
    42
    17
    >>> for i in range(len(L)):
    ...     print(i)
    ... 
    0
    1
    2
    3
    4
    >>>
    Et là ton code donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    >>> for l in L:
    ...     if l>0:
    ...         p=(l-1)
    ...         G=l+p
    ...     if l==0:
    ...          G=0
    ...     print(G)
    ... 
    15
    1
    7
    83
    33
    ce qui n'a strictement rien à voir avec (j'utilise la forme pythonique) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> [ sum(t) for t in zip([0]+L, L+[0]) ]
    [8, 9, 5, 46, 59, 17]
    ps : utiliser des noms de variables plus longs que 1 caractère, et réserver les caractères (1 caractère) pour des compteurs te permettrait d'y voir plus clair je pense
    "La simplicité ne précède pas la complexité, elle la suit." - Alan J. Perlis
    DVP ? Pensez aux cours et tutos, ainsi qu'à la FAQ !

Discussions similaires

  1. Appel d'une fonction dans une fonction d'une même classe
    Par script73 dans le forum Général Python
    Réponses: 3
    Dernier message: 06/03/2015, 10h18
  2. Créer une fonction dans une fonction
    Par chris81 dans le forum Windows Forms
    Réponses: 7
    Dernier message: 20/12/2007, 15h50
  3. Réponses: 3
    Dernier message: 29/04/2006, 13h02
  4. Réponses: 3
    Dernier message: 16/01/2006, 16h02
  5. Réponses: 4
    Dernier message: 17/03/2004, 17h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo