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 :

Liste et indexation


Sujet :

Python

  1. #1
    Membre très actif Avatar de Kurodiam
    Inscrit en
    Décembre 2013
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Décembre 2013
    Messages : 208
    Par défaut Liste et indexation
    Bonjour,

    j'ai quelques difficultés avec des exos basiques de python au niveau de la compréhension de l'énoncé .

    exercice 1 :

    erreurs = [['Alberta', 1965, 'avril', 6], ['Missouri', 1965, 'avril', 9]]

    Comment retrouver le jour et quelle expression calculerait ,à partir de 'erreurs' , le nombre de jours entre les deux dates ?

    Ma réponse : pour trouver le 9 avril
    >>> erreurs[1][3]
    9

    Mais le nombre de jours entre les deux dates :

    >>> erreurs[1][3] - erreurs[0][3]
    3



    Exercice 2 :

    Une liste est plate lorsqu'elle ne contient pas de sous-liste : quelle expression permettrait d'aplatir 'erreurs' , d'en faire une liste plate de 8 élèments ?

    Ma réponse est :

    >>>[erreurs[0][0]]+[erreurs[0][1]]+[erreurs[0][2]]+[erreurs[0][3]]+[erreurs[1][0]]+[erreurs[1][1]]+[erreurs[1][2]]+[erreurs[1][3]]

    ['Alberta', 1965, 'avril', 6, 'Missouri', 1965, 'avril', 9]


    Bonnes fêtes de fin d'année

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2011
    Messages : 180
    Par défaut
    Bonjour

    Exercice 1 :

    Ça n'a pas l'air mauvais. Par contre, pour le nombre de jour entre deux dates, cela tombe bien car les deux dates de l'exemple sont au même mois et à la même année.

    Je ne sais pas ou tu en es avec l'utilisation du module date mais, pour ce calcul, il faut :
    • Transformer tes date dans les sous liste en objets date
      (ce n'est plus "basique" à cause du mois en français)
    • Calculer la différence entre les deux dates avec une simple soustraction


    Exercice 2
    Mais pourquoi se casser la tête ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    erreur[0] + erreur[1]
    aplatit la liste

  3. #3
    Membre très actif Avatar de Kurodiam
    Inscrit en
    Décembre 2013
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Décembre 2013
    Messages : 208
    Par défaut
    Merci pour ces précisions .Ce serait différent si les années et les mois n'étaient pas pareil . Comment on ferait ? L'année peut être bissextile , mais il y'a 12 mois dans une année .

    erreurs = [['Alberta', 1965, 'avril', 6], ['Missouri', 1985, 'mai', 9]]


    Sinon pour trouver l'expression rassemblant les noms des deux villes dans une nouvelle liste ?
    erreurs = [['Alberta', 1965, 'avril', 6], ['Missouri', 1965, 'avril', 9]]

    Ce serait la réponse :

    >>> [erreurs[0][0]]+[erreurs[1][0]]
    ['Alberta', 'Missouri']



    exercice 3 :

    Les listes plates (de profondeur 1) sont utilisées en calcul numérique , pour représenter les vecteurs ; la dimension d'un vecteur V est alors len(V) .
    Soit V = [] ; quelles instructions permettraient de remplir ce vecteur avec les seizes premiers entiers positifs , de 0 à 15 ?


    Ma réponse est :

    >>> V = []
    >>> for x in range(0, 15) : V = V + [x] ( c'est dans le cours , mais j'ai pas compris)

    >>> V
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]



    exercice 4 :

    Soit V = [] ; quelles instructions permettraient de remplir ce vecteur avec les carrés des seize premiers entiers positifs , de 1 à 16 ?


    ma réponse est incompléte :

    >>> V = []
    >>> for x in range(1, 16) : V = V + [x]

    >>> V
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2011
    Messages : 180
    Par défaut
    Sur Internet, il y a moyen de trouver comment calculer le nombre
    de jours entre deux dates.
    Sinon, Python dispose de classes prévues à cet effet.
    La seule petite difficulté ici est que le mois est donné en français. Mais, encore une fois, on peut facilement la lever. Ce n'est peut être plus du Python "basique" mais la solution reste élémentaire tout de même.

    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
    19
    20
    21
    22
    23
    24
    25
     
    #!/usr/bin/env python
    # -*- coding:UTF-8  -*-
    import locale
    from datetime import datetime
     
    # Mettre la locale à la bonne valeur
     
    locale.setlocale(locale.LC_ALL,'French_France.1252')
     
    # Si l'environnement utilisateur de l'os est déja en français alors
    # l'instrunction précédente devient :
     
    ##locale.setlocale(locale.LC_ALL,'')
     
    erreurs = [['Alberta', 1965, 'avril', 6], ['Missouri', 1985, 'mai', 9]]
     
    # Première chose à faire : transformer les trois dernier éléments de chaque liste en datetime
    # avec la méthode ad hoc qui est strptime
     
    fconv = lambda x: datetime.strptime('-'.join(map(str,x[-3:])),'%Y-%B-%d')
     
    difference = fconv(erreurs[1]) - fconv(erreurs[0])
     
    print difference.days
    Note que si tu travaille en Python 3.x, il faut que tu utilise la fonction print et
    non la commande.

    Exercice 3

    A mon avis, ce que tu n'a pas bien saisi ici, c'est le rôle de l'opérateur +.
    En effet celui-ci ne sert pas qu'à additionner des nombre ou a concaténer des
    chaînes de caractères. Il sert aussi à concaténer des liste. Deuxième chose :
    dans l'exemple fourni, il manque juste l'élévation à la puissance deux.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    V = []
    for x in range(0, 15) : V = V + [x**2]
    Sous Python 2.x, la fonction range retourne une liste, itérable avec un for (voir documentation). Sous Python 3.x, elle retourne un itérateur .
    Je ne sais si tu as déjà abordé cette notion.

    Un dernier petit conseil : Quand tu poste du code, utilise la balise prévue à cet effet et précise toujours ce que tu comprends pas.

  5. #5
    Membre très actif Avatar de Kurodiam
    Inscrit en
    Décembre 2013
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Décembre 2013
    Messages : 208
    Par défaut
    Merci beaucoup pour tes conseils !en effet , les débutants ont tendances à zapper certaines choses

    Mais sinon pour l'exercice 3, çà dit que çà doit commencer de 1 à 16 .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> V = []
    >>> for x in range(1, 16) : V = V + [x**2]
     
    >>> V
    [1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225]
    Donc si j'ai bien saisi , si on nous demande des instruction avec les seize premières puissance de 2 , de 15 à 0 ,décroissante de la gauche vers la droite ,la réponse serait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> V = []
    >>> for x in range(15, 0) : V = V + [x**2]
    
    >>> V
    [] # mais cette liste ne renvoie rien , pourquoi ?

    Donc , pour créer une expression qui extrairait de V les 8 puissances les plus faibles , il suffit d'utiliser les index , et même la méthode split ? et je dois me servir de l'exercice 3 ,forcément .


    PS : un itérateur ,c'est quoi?
    je sais qu'une itération c'est une répétition .


    Sinon pour print , c'est juste utilisé pour une phrase ?

  6. #6
    Membre émérite
    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
    Par défaut
    Bonjour,
    Citation Envoyé par Kurodiam Voir le message
    Donc si j'ai bien saisi , si on nous demande des instruction avec les seize premières puissance de 2 , de 15 à 0 ,décroissante de la gauche vers la droite ,la réponse serait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> V = []
    >>> for x in range(15, 0) : V = V + [x**2]
    
    >>> V
    [] # mais cette liste ne renvoie rien , pourquoi ?
    Dans ce cas il faut juste utiliser le troisième argument facultatif de range (cf doc).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> V = []
    >>> for x in range(15, 0, -1):
    	V = V + [x**2]
     
     
    >>> V
    [225, 196, 169, 144, 121, 100, 81, 64, 49, 36, 25, 16, 9, 4, 1]
    >>>
    Où, plus facilement:

    qui donne quelques explications et surtout les paramètres!!

    Citation Envoyé par Kurodiam Voir le message

    PS : un itérateur ,c'est quoi?
    je sais qu'une itération c'est une répétition .
    itérateurs

    En gros, juste une structure sur laquelle il est possible d'itérer!! ;-)
    ("Un objet Python générateur de séquences": Swinnen)

    Clodion

  7. #7
    Membre très actif Avatar de Kurodiam
    Inscrit en
    Décembre 2013
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Décembre 2013
    Messages : 208
    Par défaut
    D'accord!Donc la fonction help(range) , on peut la taper dans par ex : mon python 2.7.6 , et aprés j'ai des précisions sur comment 'range' fonctionne .Mais bon , le 'range' , en français , çà vient du mot rang (genre rangée) .
    D'aprés ton lien , il y'a trois grand types de séquences : list , tuple et range .

    Mais on peut pas utiliser la fonction help pour le sens de 'for' , 'print' , ce serait trop facile je pense !

    Pour 'range' , quand y'a une liste vide , il faut utiliser un 3ème argument .

    _Mon anglais est un peu pourri , mais bon , je me lance :

    Donc pour la condition 'while' , on l'utilise que lorsqu'une répétition d'instructions sont vrai (ou True) et le' else' qui vient avec .

    Mais la condition 'elif' , j'ai pas compris comment l'utiliser , pour palier , j'utilise toujours if et else , mais çà fait un script assez long .

    Bonne année 2014 clodion et tout le monde

  8. #8
    Membre émérite
    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
    Par défaut
    Bonsoir,
    Citation Envoyé par Kurodiam Voir le message
    Mais on peut pas utiliser la fonction help pour le sens de 'for' , 'print' , ce serait trop facile je pense !
    Dans le shell Python, on utilise la commande "help(range)"…
    Avec quelques entrées en plus, le mode "aide" est plus complet:

    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
    19
    20
    21
    22
    23
    >>> 
    >>> help()
     
    Welcome to Python 3.3!  This is the interactive help utility.
     
    If this is your first time using Python, you should definitely check out
    the tutorial on the Internet at http://docs.python.org/3.3/tutorial/.
     
    Enter the name of any module, keyword, or topic to get help on writing
    Python programs and using Python modules.  To quit this help utility and
    return to the interpreter, just type "quit".
     
    To get a list of available modules, keywords, or topics, type "modules",
    "keywords", or "topics".  Each module also comes with a one-line summary
    of what it does; to list the modules whose summaries contain a given word
    such as "spam", type "modules spam".
     
    help> for
    The ``for`` statement
    *********************
     
    The ``for`` statement is used to iterate over the elements of a
    sequence (such as a…
    Sinon,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    >>> help("for")
    The ``for`` statement
    *********************
     
    The ``for`` statement is used to iterate over the elements of a
    sequence (such as a string, tuple or list) or other iterable object:
     
       for_stmt ::= "for" target_list "in" expression_list ":" suite
                    ["else" ":" suite]
     
    The expression list is evaluated…
    est aussi valide!!

    Citation Envoyé par Kurodiam Voir le message
    Pour 'range' , quand y'a une liste vide , il faut utiliser un 3ème argument .
    Cela n'a rien à voir…
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> help(range)
    Help on class range in module builtins:
     
    class range(object)
     |  range(stop) -> range object
     |  range(start, stop[, step]) -> range object
     |  
     |  Returns a virtual sequence of numbers from start to stop by step.
    Ligne 5: les arguments de "range" sont start/stop/step… Ce qui peut se traduire par début/fin/pas… En gros "range" renvoie une un à un les éléments d'une séquence débutant par "start", se terminant par "stop" et par pas de "step" (c'est à dire l'intervalle entre deux valeurs consécutives). Par défaut (lorsqu'il n'est pas exprimé), step vaut "+1".
    range(1, 5, 1) renvoie 1, 2, 3, 4
    range(1, 10, 2) renvoie 1, 3, 5, 7, 9
    range(-1, -5, -1) renvoie -1, -2, -3, -4

    Il est possible de tester le comportement de range dans le shell!!

    Citation Envoyé par Kurodiam Voir le message
    Mais la condition 'elif' , j'ai pas compris comment l'utiliser , pour palier , j'utilise toujours if et else , mais çà fait un script assez long .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if cond:
       expression
    elif cond:
       expression
    else:
       expression
    J'ai pris cela pour du simple français:
    si machin:
    je fais cela
    sinon si bidule:
    je fais ceci
    sinon:
    je fais autre chose.

    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
    >>> def test(a):
    	if a > 0:
    		print("a est positif")
    	elif a == 0:
    		print("a est nul")
    	else:
    		print("a est négatif")
     
     
    >>> test(-1)
    a est négatif
    >>> test(-0)
    a est nul
    >>> test(1)
    a est positif
    >>>
    Il suffit de tester dans le shell!!!

    Oui!! Bonne année à tout le monde!!

    Clodion

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Récupérer la liste des indexes d'une base
    Par Najdar dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 03/07/2008, 12h15
  2. Liste des index unique
    Par magboom dans le forum Débuter
    Réponses: 3
    Dernier message: 15/02/2008, 16h43
  3. Listes des indexes d'une base de de données
    Par The eye dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 11/01/2008, 11h55
  4. liste modifiable index -1
    Par samtheh dans le forum VBA Access
    Réponses: 2
    Dernier message: 04/07/2007, 11h17

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