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 :

Besoin avis communauté


Sujet :

Python

  1. #21
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 875
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par sloder Voir le message
    mais par manque d'expérience je l'aurais écris comme le premier.
    Ca viendra (enfin j'espère).

    Citation Envoyé par sloder Voir le message
    J'ai enlevé le modulo mais je n'aurais peut-être pas dû...
    La programmation ce n'est pas une marmite de potion magique dans laquelle on jette du code au hasard. C'est analyser un problème, trouver sa solution, la décomposer en tâches élémentaires à base de variables, boucles et alternatives puis traduire ces tâches en instructions dans la syntaxe du langage utilisé. Si tu mets un modulo c'est parce que la solution demande un modulo. Et si tu l'enlèves c'est qu'il n'était pas utile. Et comme je t'ai expliqué plus avant, si "a" varie de 0 à 11, alors a%12 est égal à a. Donc le modulo est inutile. Ceci dit, t'es pas obligé de me croire sur parole. Tu peux aussi prendre un papier et aligner sur 2 colonnes les nombres de 0 à 11 à gauche et le résultat du nombre modulo 12 à droite et regarder s'il y a des différences...

    Places ton print de la ligne 8 en dehors de la boucle et c'est fini. Et ensuite essaye de faire une analogie entre "code tapé" et "résultat affiché" et surtout ce qui ce passe quand le print tab se trouve dans une boucle qui crée "tab" au fur et à mesure...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  2. #22
    Membre averti
    Homme Profil pro
    Débutant Programmation
    Inscrit en
    Juillet 2018
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Débutant Programmation

    Informations forums :
    Inscription : Juillet 2018
    Messages : 16
    Par défaut
    Le programme marchait sans le modulo, je l'ai donc retiré. Mais sans vraiment savoir pourquoi. En réalité, je ne suis pas sûr d'avoir bien compris son rôle. Selon ton explication, il faudrait que a varie de 0 à un nombre supérieur à 12 pour que le modulo devienne utile au programme...

    J'ai sorti le print de la boucle et tout marche impeccable.
    Je crois qu'en laissant "print" dans la boucle, il affiche le résultat de l'instruction "t3.append(t1[a]),t3.append(t2[a])" jusqu'à ce que a soit égal à 11. Mais pourquoi il l'affiche de cette manière, je pourrais pas le dire. Il faut que je réfléchisse encore...

    Je voulais te dire aussi merci pour la syntaxe a+=1. Je ne connaissais pas, c'est plus rapide...

    Avec un grand merci pour toute ton aide et celle des autres...

  3. #23
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 962
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 962
    Par défaut
    J'obtiens comme résultat une liste de liste allant crescendo en forme d'escalier.
    Il faut que je réfléchisse encore
    Attention ce n'est pas une liste de listes, en voici une si tu veux un exemple,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ma_liste = [[1, 2, 3, 4], [5, 6, 7, 8, 9]]
    Ci-dessus une liste composée de deux listes.

    Pour la forme d'escalier, t3 est mis à jour à chaque tour de boucle et tu demandes d'afficher t3, donc ,comportement normal ! Il faudrait faire cette demande lorsque la boucle est terminée, c'est à dire hors du bloc, ce que tu proposes dans ton dernier post.

    il faudrait que a varie de 0 à un nombre supérieur à 12 pour que le modulo devienne utile au programme...
    Non c'est juste une question d'intérêt. Ici on connaît la taille de la liste des mois (12 mois dans une année). Ça s'appelle une constante, aucun besoin de calcul superflue... donc comme le dis Sve@r, cet opérateur est inutile.

    Dans ton code on aurait pu être plus explicite pour faire comprendre au lecteur la problématique.

    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
    MOIS = 12
    t1 = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    t2 = ['Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'juin','juillet', 'Août', \
        'septembre', 'Octobre', 'Novembre', 'Décembre']
    
    index = 0
    t3 = []
    
    while index < MOIS:
        mois, jour = t2[index], t1[index]
        t3.append(mois)
        t3.append(jour)
        index += 1
    
    print(t3)

    • Toujours essayer de donner des noms de variables qui expriment les besoins.
    • Espacer entre variable, opérateur et valeur
    • Séparer quand le besoin s'en fait sentir les blocs (boucle while)



    Bonne continuation...

  4. #24
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 875
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par sloder Voir le message
    En réalité, je ne suis pas sûr d'avoir bien compris son rôle.
    C'est dommage car c'est toi qui l'avait mis. Ce que je veux dire par là, c'est que quand tu places une instruction, tu dois non seulement savoir ce qu'elle fait, mais ce que cela va entrainer comme résultat. Et c'est parce que tu as besoin de ce résultat que tu écris l'instruction...

    Citation Envoyé par sloder Voir le message
    Selon ton explication, il faudrait que a varie de 0 à un nombre supérieur à 12 pour que le modulo devienne utile au programme...
    C'est vrai que si d'aventure tu avais "a" qui varie de 0 à n (n > 12) et que tu veuilles créer une équivalence entre "a" et l'indice correspondant de t1, alors oui il faudrait calculer a%12.

    Petit exemple: si tu devais convertir un indice variant de 0 à 63 en position sur un échiquier (ligne/colonne), alors tu aurais ligne=i//8 et colonne=i%8 (rappel la syntaxe "//" est une division euclidienne/entière)

    Citation Envoyé par sloder Voir le message
    Mais pourquoi il l'affiche de cette manière, je pourrais pas le dire. Il faut que je réfléchisse encore...
    Chaque tour de boucle affiche le contenu de t3. Au premier tour, t3 contient 2 éléments (le nb de jours et le nom du premier mois) donc il affiche ces deux éléments. Au tour suivant, il en contient 2 de plus donc il affiche les 4 éléments de t3. Et etc etc.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #25
    Membre averti
    Homme Profil pro
    Débutant Programmation
    Inscrit en
    Juillet 2018
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Débutant Programmation

    Informations forums :
    Inscription : Juillet 2018
    Messages : 16
    Par défaut
    Ok, je vois... Ce sont plusieurs listes dans une liste alors que le résultat du programme lorsque mon print était dans la boucle ne donnait pas plusieurs listes dans une seule.

    Oui Sve@r m'avait dit qu'il fallait sortir le print de la boucle. Je n'avais pas trouvé la solution.

    J'essaierai d'être plus clair dans l'écriture de mes codes. Je vais devoir étudier dur avant d'arriver à écrire des codes aussi clair que le tien. C'est vrai que c'est mieux lorsque le script est lisible par tous.

    Le modulo, en fait, je l'ai utilisé que deux fois. Une première pour écrire un code afin de convertir des secondes en années, mois, jours, minutes. C'était l'exercice 4.6 p 33 du livre de Swinnen.
    La deuxième fois que je l'ai rencontré, c'était un exemple qu'il fallait analyser, toujours dans le livre de Swinnen p 44. (Pour ce cas, je ne l'ai pas utilisé mais me suis efforcé de comprendre son rôle...

  6. #26
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 875
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par sloder Voir le message
    La deuxième fois que je l'ai rencontré, c'était un exemple qu'il fallait analyser, toujours dans le livre de Swinnen p 44. (Pour ce cas, je ne l'ai pas utilisé mais me suis efforcé de comprendre son rôle...
    Je pense que tu veux parler de cet exercice
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    jour = ['dimanche','lundi','mardi','mercredi','jeudi','vendredi','samedi']
    a, b = 0, 0
    while a<25:
    	a=a + 1
    	b=a % 7
    	print a, jour[b]
    Et je comprends alors comment tu t'en es servi pour écrire celui en sujet principal de ce topic. C'est vrai que Swinnen modifie "a" après l'avoir testé mais avant de s'en être servi ; ce qui va à l'encontre des règles de programmation claire (l'affichage commence à "lundi" alors que la logique associative "je lis un code => j'estime ce qu'il va faire" laisserait plutôt penser qu'on va commencer à "dimanche").
    Toutefois, tant que tu n'auras pas étudié le fonctionnement de l'opérateur "modulo" tu ne pourras pas t'en sortir. C'est comme si tu disais "je voudrais comprendre pourquoi a=a+1" alors que tu n'aurais jamais appris l'addition.
    Le modulo calcule le reste d'une division entière. Si on veut imager son fonctionnement, alors calculer n%p c'est décompter le nombre "n" dans un cercle contenant "p" cases (avec retour au début du cercle quand on arrive au bout) et il donne au final la case sur laquelle il s'arrête (case qui, bien sûr, ne pourra jamais dépasser ni même atteindre "p"). Un peu comme quand on décompte "am stram gram pique et pique etc" en désignant à chaque syllabe un joueur.
    Et c'est parce que le décompte des secondes fonctionne exactement de la même manière (décompter par exemple 138 secondes c'est dérouler deux fois 60 secondes et il reste 18 secondes) que ton premier exercice (convertir des secondes en H:M:S) était à base de modulo.

    S'il n'existait pas, on pourrait le reproduire (par exemple dans cet exercice ci-dessus) de cette façon
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    jour = ['dimanche','lundi','mardi','mercredi','jeudi','vendredi','samedi']
    a, b = 0, 0
    while a<25:
    	a=a + 1
    	if b < 6:
    		b=a
    	else:
    		b=0
    	print a, jour[b]

    Ou bien de celle-là
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    jour = ['dimanche','lundi','mardi','mercredi','jeudi','vendredi','samedi']
    a, b = 0, 0
    while a<25:
    	a=a + 1
    	b=a - (a // 7) * 7
    	print a, jour[b]

    Donc ici, le modulo est utile parce que "a" dépasse la taille du tableau "jour". Et donc calculer "a%7" permet d'associer "a" avec une valeur allant de 0 à 6 de façon équitable.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #27
    Membre averti
    Homme Profil pro
    Débutant Programmation
    Inscrit en
    Juillet 2018
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Débutant Programmation

    Informations forums :
    Inscription : Juillet 2018
    Messages : 16
    Par défaut
    Oui c'est cet exercice. En effet, j'ai placé "a" selon ce que j'ai lu dans le livre de Swinnen.
    Il faut que je pratique le plus possible pour assimiler toutes ces notions de base. Sinon je n'arriverai jamais à programmer.


    J'ai compris la fonction du modulo en ce qui concerne la conversion des secondes. En revanche, pour la liste de la semaine qui donne pour résultat un ensemble répétée des jours de la semaine associés à un compteur allant jusqu'à 25, c'est plus difficile.

    Le modulo après avoir diviser n en nombre p donne le résultat de ce qu'il n'a pas pu diviser par p. Si le modulo est égale à zéro, n est parfaitement divisible par p.


    Mais je n'arrive pas bien à faire le rapport entre le modulo et le résultat du code de Swinnen. Il permet d'associer dans la boucle le résultat de "a%7" à chaque jour de la semaine allant jusqu'à 25?


    Avec plus d'expérience, j'arriverai peut-être à mieux comprendre son fonctionnement….

  8. #28
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Pour comprendre ce que les commandes font, il ne faut pas hésiter à utiliser print.

    Donc pour comprendre le modulo par exemple, on peut écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i in range(25):
          resultat = i%7
          print("i modulo 7 = ",resultat)
    Et maintenant si tu as une liste comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    jours = ['lundi','mardi','mercredi','jeudi','vendredi','samedi', 'dimanche']
    tu devrait pouvoir saisir que 0 va correspondre à lundi, 1 à mardi, et etc ...

  9. #29
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 962
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 962
    Par défaut
    Le modulo n'est pas un opérateur spécifique à python, il est utilisé dans tous les langages de programmation.

    Il faut donc commencer par bien comprendre ce que cet opérateur fait, pour en comprendre ensuite les résultats donnés par ton interpréteur. Je t'invite à lire sa documentation sur wikipedia. Ensuite fait les calculs à la main et compare les avec les résultats affichés par l'interpréteur (utilisation de print comme dis précédemment).

  10. #30
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 875
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par sloder Voir le message
    Mais je n'arrive pas bien à faire le rapport entre le modulo et le résultat du code de Swinnen. Il permet d'associer dans la boucle le résultat de "a%7" à chaque jour de la semaine allant jusqu'à 25?
    Alors déjà les jours de la semaine ne vont pas jusqu'à 25 mais jusqu'à 7 (en réalité jusqu'à 6 puisqu'un tableau commence à 0).

    Tu as j'espère bien conscience que "b", indice du tableau, ne peut pas dépasser 6. Mais la boucle principale, elle, tourne 25 fois avec "a" qui varie de 0 à 24. Et à chaque tour, elle doit afficher un élément du tableau.
    Alors comment faire pour associer "b" et "a" tout en faisant en sorte que "b" ne dépasse jamais 6 ? La réponse la plus simple: le modulo.
    Ainsi quand "a" commence, il vaut 0 et "b" vaut 0. On peut donc afficher jour[b]. Et il en va de même jusqu'à "a" et "b" qui arrivent à 6 ensembles.
    Ensuite "a" passe à 7 et là, ben là "b" lui il repasse à 0. Comme ça il a bien été incrémenté comme "a" tout en restant malgré tout dans les limites imposées. Et ça continue jusqu'à "a" qui arrive à 13 tandis que "b" arrive encore une fois à 6.
    Et ensuite, quand "a" passe à 14 alors "b" repasse de nouveau à 0. Et etc etc etc.
    C'est comme si tu avais 25 chocolats et 7 enfants. Pour essayer d'être le plus équitable possible, la seule façon de faire est de placer les enfants en cercle et donner un chocolat à chacun l'un après l'autre tant qu'il y en a.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  11. #31
    Membre averti
    Homme Profil pro
    Débutant Programmation
    Inscrit en
    Juillet 2018
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Débutant Programmation

    Informations forums :
    Inscription : Juillet 2018
    Messages : 16
    Par défaut
    Je comprends mieux son rôle en programmation. Je vais être amener à le rencontrer assez souvent ce qui me permettra de l'assimiler un peu plus à chaque fois.

    Vous avez l'air de tous travailler dans l'informatique plus spécifiquement dans la programmation. Vous avez tous un niveau élevé. Ça fait rêver...

    Un grand merci pour toute votre aide, c'est vraiment sympa...On se sent entouré et aidé...

Discussions similaires

  1. besoin avis projet de server auto hebergement et media center
    Par cabbes dans le forum Virtualisation
    Réponses: 0
    Dernier message: 22/11/2012, 10h08
  2. Besoin avis pour dev avec TServerSocket (avec ou sans thread)
    Par Invité dans le forum Web & réseau
    Réponses: 15
    Dernier message: 04/07/2011, 10h45
  3. Besoin Avis d'Expert Oracle-Objet (SQL3)
    Par cybernoid dans le forum SQL
    Réponses: 3
    Dernier message: 12/10/2007, 21h25
  4. [cv] Besoin avis/conseil
    Par SoBaKa dans le forum CV
    Réponses: 14
    Dernier message: 14/06/2007, 09h34

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