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 :

[NEOPHYTE] Ma syntaxe est elle bonne ? Ma logique l'est elle aussi ?


Sujet :

Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 15
    Points : 23
    Points
    23
    Par défaut [NEOPHYTE] Ma syntaxe est elle bonne ? Ma logique l'est elle aussi ?
    Bonjour et merci d'avoir pris le temps de cliquer sur mon topic et de lire ce qui suit.

    Je suis débutant dans le monde la programmation python (ca fait 48 heures que je m'y suis mis), et plus généralement à peu près débutant dans la programmation.

    A la tete d'un MMO multijoueur basé sur le jeu vidéo GTA San Andreas, je travaille régulièrement avec mes collègues sur un language informatique, le pawn, un dérivé direct du C (si je ne dis pas de bétises), très puissant mais pas forcément très souple, et je dois dire qu'après 48 heures de découverte de Python, j'en suis sous tombé le charme. Sa syntaxe épurée, son typage dynamique et les quelques spécificités que j'ai touché du bout des doigts pour le moment me donne la trique, veuillez me pardonner pour ce langage cru mais j'ai du mal à trouver d'autres mots et je suis sur que certains d'entre vous ont peut être du ressentir cette meme attraction ! (dans le cas contraire, un petit séjour en HP ne me fera pas de mal).

    Je commence à me mettre au contact de ce langage en suivant l'un des livres gratuits disponibles sur ce site d'ailleurs, et je tiens à remercier le ou les contributeurs de ce livre pour leur formidable travail.

    Néanmoins, je me sens perdu sur plusieurs points, je ne veux pas partir sur de mauvaises bases, et j'aimerais que vous me donniez vos avis concernant ces points précis, en prenant comme exemple un minuscule script que j'ai codé il y a une heure ou deux pour l'occasion.

    Il s'agit d'un script pour calculer le PGCD de deux nombres (sachez qu'à l'heure actuelle je n'en suis qu'en début d'apprentissage et que je ne connais qu'une boucle python, while) :

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    # -*- coding: utf-8 -*-
     
     
     
     
    print("_______________\n_______________\n\n____PGCD____", end ="\n\n\n")
     
     
    saisie1 = input("Tape le premier nombre: ")
    dividende = int(saisie1)
     
     
    saisie2 = input("Tape le deuxieme nombre: ")
    diviseur = int(saisie2)
     
     
    if dividende < diviseur:
     
        dividende, diviseur = diviseur, dividende
     
     
    reste = 1
     
    while reste != 0:
     
        reste = dividende % diviseur
     
     
        if reste == 0:
            break
     
     
        dividende = diviseur
        diviseur = reste
     
     
    resultat = diviseur
    # car la derniere valeur du diviseur à la sortie de la boucle
    # correspond au dernier reste non nul de la division euclidienne.
     
    print("\n\nPGCD des nombres ", saisie1," et ", saisie2,": ", resultat, sep="", end="\n\n")

    Questions:

    1. Ce code est il lisible ? Ai je respecté les règles d'usage en matière de programmation et notamment vis à vis du langage Python et de sa sémantique ? Si non, pourriez vous me dire lesquelles et m'aiguiller afin de l'optimiser dans sa lisibilité.
    2. Ma logique est elle bonne ?
    3. Ce code est il optimisable (fausse question, j'imagine qu'il est forcément optimisable). Pourriez vous me donner des indices sur son optimisation.
    4. Une chose me dérange dans Python. En Pawn (et peut etre en C/C++), il est possible d'écrire sur la meme ligne une condition et l'instruction à effectuer si cette condition est vraie (dans la mesure ou le bloc d'instruction est composé d'une seule instruction évidemment), cela permet d'éviter de sortir deux accolades inutiles, et meme de simplifier certaines opérations conditionnelles, en esquivant un else if ou un else par exemple, c'est très pratique,cela offre un code concis et quand c'est bien codé on ne s'y perd pas.

      Exemple :

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      new
      	a
      	b
      	c
      ;
       
      if(a == b)  a = b + c;
      else if( a < b) a = b - c;
      else b = c;
      ou encore

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      ma_fonction(a, b, c)
      {
      	if(!a == b)  return 0;
      	// dans le cas contraire la suite d instructions continue jusqu a la fin de la fonction
       
      	return 1;
      }
      En reprenant un morceau de code de mon script sous python :

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      if dividende < diviseur:
       
          dividende, diviseur = diviseur, dividende
      Est il possible de regrouper sur la meme ligne la condition et l'instruction, afin d'éviter une identation inutile dans ce cas précis (du moins, je la trouve inutile étant donné que le bloc d'instruction est composé d'une seule instruction).

    5. J'ai parlé des return dans ma demonstration ci dessus, les return en python ont il la meme utilité que dans un langage comme le C ? Sont ils utilisés de la meme manière dans une fonction ?
    6. En Python, doit on toujours affecter une valeur à une variable qu'on vient de déclarer ou puis je retarder l'attribution d'une valeur à la variable nouvellement déclarée?
    7. Dans mon script Python, si je rentre une valeur de 0 durant la saisie d'un des deux nombres, le script crashera au moment de faire le calcul evidemment. J'ai tenté d'écrire une condition que j'écris régulièrement en Pawn pour faire des comparaison entre des variables de tous types (et pas uniquement booléennes), et ca ne passe pas en Python.

      Evidemment ca n'est pas passé en Python donc j'en ai conclus que le symbole "OU" n'est pas "||", j'ai donc tenté "or" et idem ca n'est pas passé. J'en ai conclus que le "or" ne fonctionne que sur des variables de type booléennes. Je me retrouve donc coincé car je n'ai pas envie d'utiliser 2 if à la suite je veux juste faire :
      SI a = 0 OU b = 0 ALORS

      Peut on faire ca en python sur des variables autres que booléennes ?


    Merci d'avance pour vos réponses.

  2. #2
    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
    Citation Envoyé par BenBout62 Voir le message
    Merci d'avance pour vos réponses.
    La plupart des réponses à vos nombreuses questions se trouvent dans le Python tutorial. Comme vous semblez savoir déjà un peu programmer, le lire et se l'approprier pour retrouver les constructions de base est un bon investissement.
    Vous n'y trouverez probablement pas la suggestion d'écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> if a == b: a = b + c
    ... elif a < b: a = b - c
    ... else: b = c
    ...
    car c'est peu lisible (le standard est défini par le PEP8)
    Pour vos histoires d'opérateurs logiques: and, or, not... fonctionnent:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> a = b = 0
    >>> if a == 0 or b == 0: print ('ok')
    ...
    ok
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 15
    Points : 23
    Points
    23
    Par défaut
    Effectivement j'ai du faire une erreur de syntaxe en ce qui concerne les opérateurs logiques, j'aurais du vérifier plusieurs fois avant de poster.

    Je vais aussi lire ce fameux PEP8.

    Merci pour cette réponse rapide Wiz.

Discussions similaires

  1. [mysql] [calcul de dates] Ma requête est-elle bonne ?
    Par tiger33 dans le forum Requêtes
    Réponses: 2
    Dernier message: 22/09/2006, 15h30
  2. [c# 2.0]TryParseExact Quelle est la bonne syntaxe ?
    Par Pierre8r dans le forum Windows Forms
    Réponses: 2
    Dernier message: 25/05/2006, 19h34
  3. [XML] ma structure est t-elle bonne ?
    Par guy2004 dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 16/03/2006, 11h24

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