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 :

Correction de code


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2019
    Messages : 6
    Par défaut Correction de code
    Bonjour,
    je réalise un tutoriel d'apprentissage du langage Python et je souhaite une critique (constructive ) sur ma réponse.
    Note: le code fonctionne comme je le souhaite. C'est la structure du code que je souhaite faire vérifier.
    Merci à vous

    consigne: Créez un programme permettant d'avoir une balle noire qui rebondit sur les bords de la fenêtre. La position de départ, la vitesse de départ ainsi que la direction de départ devront être aléatoires. La balle ne devra pas rester immobile. Vous devrez créer une classe Balle. Cette classe possédera 2 méthodes (en plus du constructeur) : "afficheBalle" (qui permettra de dessiner la balle l'écran à l'aide d'une fonction "ellipse") et "depBalle" qui gérera les déplacements de la balle.

    Proposition:
    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
    42
    43
    44
    45
    46
    47
    48
     
    class Balle(object):
        def __init__(self):
          self.xi = random(0,400)
          self.yi = random(0,400)
     
    # pour que vitesse non nul
          self.vi = random(1,10)
     
    # pour que direction non nul
          self.dix = random(-1,1)
          while self.dix == 0:
              self.dix = random(-1,1)
          self.diy = random(-1,1)
          while self.diy == 0:
              self.diy = random(-1,1)
     
        def afficheBalle(self):
            # qui permettra de dessiner la balle l'écran à l'aide d'une fonction "ellipse")
            ellipse(self.xi,self.yi,20,20)
     
        def depBalle(self):
    # qui gérera les déplacements de la balle.
    # x de ellipse 
            if self.xi >= 390:
                self.dix = random(-10,-1)
            elif self.xi <= 10:
                self.dix= random(1,10)
    # y de ellipse
            if self.yi >= 390:
                self.diy = random(-10,-1)
            elif self.yi <= 10:
                self.diy= random(1,10)
    # coordonnées de ellipse = position à n-1 + vitesse * direction
            self.xi = self.xi+self.vi*self.dix
            self.yi = self.yi+self.vi*self.diy
     
    b = Balle()    
    def setup():
        size(400,400)
        noStroke()
        fill(0)
        frameRate(30)
     
    def draw():
        background(255)
        b.afficheBalle()
        b.depBalle()

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    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 062
    Par défaut
    Bonsoir,

    Difficile de donner un avis constructif, le code est incomplet comprenant de nombreuses variables non définies... et voit donc pas trop l'intérêt de présenter ligne 38 à 48 et ne sait pas ce que fait ellipse (non présentée dans le code).
    Il est donc par conséquent pas testable.

    Le code est mal formée (peut-être lié au forum, mais on édite afin de le rendre propre) avec des erreurs d'indentation et de convention (comme les espaces manquants après une virgule).

    Donnez aussi la version python utilisée, car une classe qui hérite de object, c'est de la version 2 pour moi et si c'est le cas, pourquoi apprendre cette version ? Sinon object est inutile.

    Je ne sais pas trop sur quoi vous souhaitez un jugement du code donné, merci de préciser !

    Je trouve que ça manque beaucoup de rigueur pour quelqu'un qui souhaite qu'on regarde à la loupe son code

  3. #3
    Membre très actif

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Billets dans le blog
    1
    Par défaut
    Salut.

    En sus de ce que fred a signalé, on n'a pas non plus l'interface graphique utilisée, ce qui est plus qu'important à savoir.

    Pourquoi une classe Balle censé représenter une balle n'est que des coordonnées ?
    Pourquoi une méthode afficheBalle, qui devrait plûtôt se nommer afficherBalle, crée une nouvelle ellipse chaque fois ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    self.dix = random(-1,1)
          while self.dix == 0:
              self.dix = random(-1,1)
    On se demande déjà ce que fait cette fonction random ? Et pourquoi faire une boucle jusqu'à obtenir 1 ou -1 ?
    Puis pourquoi faire une fonction personnelle faisant moins bien que ce que font les fonctions du module random ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    random.choice((1, -1))
    (1, -1)[random.randint(0, 1)]
    C'est tellement plus simple.

    On évite les variables globales à une lettre, d'autant qu'utiliser balle au lieu de b, ne coûte pas plus cher.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def setup():
        size(400,400)
        noStroke()
        fill(0)
        frameRate(30)
    On se demande pourquoi faire une classe Balle (qui n'est pas une balle), mais pas une classe Ecran ? Quitte à utiliser de la poo, autant le faire partout.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def draw():
        background(255)
        b.afficheBalle()
        b.depBalle()
    Quelle différence entre la fonction fill et la fonction background ?

    Citation Envoyé par proftechnolblanc Voir le message
    je réalise un tutoriel d'apprentissage du langage Python et je souhaite une critique (constructive ) sur ma réponse.
    Ce n'est pas un peu présomptueux de vouloir réaliser un tutoriel sur un sujet que l'on ne maîtrise pas bien soi-même ?

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2019
    Messages : 6
    Par défaut
    Merci pour vos réponses.
    Il y a en effet pas mal de vides.
    1: je me suis mal exprimé, je ne suis pas l'auteur du tutoriel, je fais les exercices.
    2: Les noms des variables et fonctions sont imposés dans la consigne. Je n'ai pas fait de modifications à ce sujet.
    3: python 2 ou 3, je ne suis pas en mesure de faire la distinction entre les 2, ayant commencé le langage depuis 1 semaine.
    4: j'ai relevé toutes les corrections apportées (merci encore à ce sujet) et vais les mettre en oeuvre de suite.
    5: pour fill, ellipse et background, ce sont des fonctions liées au logiciel Processing 3.0+

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2019
    Messages : 6
    Par défaut
    Petit ajout avant qu'on ne me le fasse remarquer: je me laisse 6mois pour apprendre ce langage avant d'envisager la moindre utilisation en classe.

  6. #6
    Membre très actif

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Billets dans le blog
    1
    Par défaut
    Salut.

    Tu es donc prof ? Et en effet, il y a eu quiproquo, ton propos induisait que tu réalisais un tutoriel dans le sens rédactionnel, alors qu'en fait tu en suivais un dans le but d'apprendre
    Bon, 6 mois, ça laisse largement le temps de se perfectionner, ne t'attardes pas sur python2 qui sera bientôt caduque.

    Bonne continuation.

Discussions similaires

  1. correction du code
    Par fraisa1985 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 13/07/2008, 15h55
  2. Correction du code
    Par punisher999 dans le forum Langage
    Réponses: 8
    Dernier message: 28/01/2007, 21h26

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