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

Exercices Python Discussion :

Exercice 10.33 - Gerard Swinnen


Sujet :

Exercices Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    mars 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : mars 2020
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Exercice 10.33 - Gerard Swinnen
    Bonjour ,

    Je me propose de faire l'exercice suivant qui est dans le livre de Gerard S.

    "Écrivez un script capable d’afficher la liste de tous les jours d’une année imaginaire, laquelle commencerait un jeudi. Votre script utilisera lui-même trois listes : une liste des noms de jours
    de la semaine, une liste des noms des mois, et une liste des nombres de jours que comportent chacun des mois (ne pas tenir compte des années bissextiles). Exemple de sortie : jeudi 1 janvier vendredi 2 janvier samedi 3 janvier dimanche 4 janvier ... et ainsi de suite, jusqu’au jeudi 31 décembre
    "

    En synthèse, ceci doit être fait en connaissant uniquement les boucles et les listes et quelques méthodes sur les listes.
    Mon intuition me dit qu'il faut concaténer ces listes . Après quelques pistes de réflexion (créer une fonction sur la semaine, ou le mois; utiliser une boucle for sur chaque mois en utilisant les fonctions) j'arrive toujours au même problème de compteur, je boucle sur une durée plus longue que celle autorisée.

    Est ce que quelqu'un pourrait me donner un début de piste de réflexion?

    Merci d'avance
    Bien cordialement

    Les listes de l'exercices se présentes de la façon suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    jours = ["jeudi","vendredi", "samedi", "dimanche"]
    mois = ["janvier","février","mars","avril","mai","juin","juillet","aout","septembre","octobre","novembre","décembre"]
    nombreJours = [31,28,31,30,31,30,31,31,30,31,30,31,]

  2. #2
    Membre expert
    Homme Profil pro
    Inscrit en
    octobre 2011
    Messages
    2 494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : octobre 2011
    Messages : 2 494
    Points : 3 226
    Points
    3 226
    Par défaut
    Salut,

    Voici un code qui affiche les jours du premier mois :

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    jours = ["jeudi", "vendredi", "samedi",
             "dimanche", "lundi", "mardi", "mercredi"]
     
     
    mois = ["janvier", "février", "mars", "avril", "mai", "juin",
            "juillet", "aout", "septembre", "octobre", "novembre", "décembre"]
     
    nombreJours = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
     
     
    indice_mois = 0
     
    for date in range(nombreJours[indice_mois]):
        indice_jour = date % 7
        print(jours[indice_jour], date+1, mois[indice_mois])


    Cela donne une idée du principe, ce code n'est pas difficile à adapter pour afficher tous les jours de l'année...

  3. #3
    Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    mars 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : mars 2020
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Salut Beginner,

    Merci pour ta réponse:

    Voici le code final:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while indice_mois<13:
        for date in range(nombreJours[indice_mois]):
            indice_jour = date % 7
            print(jours[indice_jour], date+1, mois[indice_mois])
        indice_mois+=1
    En fait, à ce stade, le cours n'a pas parlé de la fonction range....mais je suis pas sûr que j'aurai trouvé, surtout "l'astuce" du modulo
    Encore merci.

  4. #4
    Membre expert
    Homme Profil pro
    Inscrit en
    octobre 2011
    Messages
    2 494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : octobre 2011
    Messages : 2 494
    Points : 3 226
    Points
    3 226
    Par défaut
    Salut,

    Ah bah tu y es presque mais pas encore...
    Tu devrais tester tes codes pour t'asssuer qu'il fonctionne bien...

    Actuellement je vois deux soucis :

    1- Les indices d'une liste commence à 0 donc la variable indice_mois devrait aller de 0 à 11 or avec ta boucle elle va jusqu’à 12.

    --> Il faut juste remplacer while indice_mois<13: par while indice_mois<12:...

    2- Pour le calcul de indice_jour on peut toujours utiliser le modulo mais pas avec la variable date qui fonctionne seulement pour les jours d'un même mois et non pour les jours de toute l'année. Pour les jours de toute l'année on peut utiliser une variable qui ira de 0 à 365...

    Si tu veux repérer l'erreur eh bien regarde les passages d'un mois à un autre, par exemple on a :

    samedi 31 janvier ---> jeudi 1 février (samedi puis jeudi cela n'est pas correcte)
    mercredi 28 février ---> jeudi 1 mars (mercredi puis jeudi cela n'est pas correcte)
    samedi 31 mars ---> jeudi 1 avril (samedi puis jeudi cela n'est pas correcte)
    ...

    Bon courage, tu n'es pas loin...

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    juin 2008
    Messages
    17 559
    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 : 17 559
    Points : 30 296
    Points
    30 296
    Par défaut
    Salut,

    Citation Envoyé par python.chris Voir le message
    Est ce que quelqu'un pourrait me donner un début de piste de réflexion?
    Cà me fait penser aux vieux pendules qui font tic tac tic tac tic tac... et à la mécanique d'horlogerie qui toutes les secondes avancera un peu l'aiguille des minutes, toutes les minutes avancera un peu les heures.

    Soit nm le compteur des mois, le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    nm = 0
    while nm < len(mois):
         print(mois[nm])
         nm = nm + 1
    va afficher les mois.

    Affichons le numéro du jour:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    nm = 0
    while nm < len(mois):
        im = 1
        while im <= nombreJours[nm]:
            print(im, mois[nm])
            im = im + 1
        nm = nm + 1
    jusque là rien de bien compliqué, c'est juste une boucle imbriquée.

    Dans cette mécanique là, ajoutons par dessus le nom du jour...

    C'est une opération qui va cannibaliser la mécanique de base pour s'incrémenter à chaque tour dans la boucle interne mais qui se remet à 0 arrivé à 7.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    nm = 0
    ij = 0
    while nm < len(mois):
        im = 1
        while im <= nombreJours[nm]:
            print(jours[ij], im, mois[nm])
            im = im + 1
            ij = ij + 1
            if ij  == 7:
               ij = 0
        nm = nm + 1
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    mars 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : mars 2020
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Salut Beginner,

    Merci pour votre retour. Concernant les différents points:

    a)- C'est une erreur que je n'aurais pas du faire. J'ai été trop vite.
    b)- Je sèche. Je comprends le problème (vous me l'avez montré même), mais je ne vois pas comment exploiter l'indice que vous m'avez donné sur une variable qui va de 0 à 365 jours et en utilisant toujours ce fameux modulo. Je ne vois même pas modulo de quoi
    Je comprends qu'il faut avoir : J[0], J[1],J[2], J[3],J[4], J[5],J[6] puis à nouveau la même série J[0],J[1],J[2],... et tout ceci pour un nombre de J ne dépassant pas 365, mais le mettre en forme dans le code je sèche. Je dirai qu'il y a sûrement une boucle while inférieur à 365 quelque part??

    Et comme ça commence à m'énerver et me dégoûter je préfère arrêter de chercher et continuer à avancer sur le cours.
    En tout cas, encore merci pour le temps passé à me répondre.


    Salut wiztricks,

    Effectivement, une fois qu'on le voit ça paraît plus simple....
    Merci pour cette solution en tout cas.



    C'est un exercice que je ne suis pas prêt d'oublier ...j'espère
    Chris.

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    juin 2008
    Messages
    17 559
    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 : 17 559
    Points : 30 296
    Points
    30 296
    Par défaut
    Citation Envoyé par python.chris Voir le message
    Effectivement, une fois qu'on le voit ça paraît plus simple...
    Ca c'est sûr.
    J'espère que vous avez un peu compris la démarche (car comment construire la solution est bien plus important que la solution).

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

  8. #8
    Membre expert
    Homme Profil pro
    Inscrit en
    octobre 2011
    Messages
    2 494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : octobre 2011
    Messages : 2 494
    Points : 3 226
    Points
    3 226
    Par défaut
    Je vous mets le code que j'avais en tête :

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    j = 0
    for indice_mois in range(12):
        for date in range(nombreJours[indice_mois]):
            indice_jour = j % 7
            print(jours[indice_jour], date+1, mois[indice_mois])
            j += 1

    Cela fonctionne bien apparemment...

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

Discussions similaires

  1. aide exo 9.4 d'apprendre python 3 de Gerard Swinnen
    Par loicsu33 dans le forum Exercices
    Réponses: 14
    Dernier message: 27/08/2020, 08h16
  2. problème affichage de none--exercice sur les classes--swinnen
    Par kalice dans le forum Général Python
    Réponses: 2
    Dernier message: 09/03/2013, 15h07
  3. Exercice 8.22 G.Swinnen
    Par Asimoov dans le forum Tkinter
    Réponses: 0
    Dernier message: 30/03/2011, 12h57
  4. Probleme exercice de Gerard Swinnen 8.13
    Par elnabo dans le forum Tkinter
    Réponses: 5
    Dernier message: 23/03/2011, 10h44
  5. Réponses: 3
    Dernier message: 22/12/2005, 00h40

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