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 :

,p,qp,q


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut ,p,qp,q
    q,q
    Dernière modification par Invité ; 21/01/2019 à 05h19.

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 704
    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 704
    Par défaut
    Salut,

    Citation Envoyé par Finstor Voir le message
    Je suis maintenant censé compter le nombre de voisins pour les côtés, je n'y arrive pas
    Si vous parlez de la fonction "Compter", s'il n'y a pas de "return n", çà ne va pas marcher.
    Puis... pas facile de faire la différence entre L, C et l, c...
    Essayez de prendre l'habitude de donner des noms plus significatifs genre LIGNES, COLONNES pour les dimensions de votre Grille et i, j pour les indices arguments de Compter: lorsque le code ne fonctionne pas, le rendre plus facile à relire vous permettrait de trouver plus facilement l'erreur.

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

  3. #3
    Invité
    Invité(e)
    Par défaut
    J'ai modifié les noms pour mieux m'orienter 😀
    Merci du conseil, le pire c'est qu'on utilisait des noms de la sorte mais notre professeur nous a fait changer les noms 😭

    Pour compter les cellules voisines pour les côtés, comment suis-je censé m'y prendre ?
    J'ai pensé à utiliser "While" mais je bloque vraiment...
    Merci beaucoup d'avance pour ta réponse et désolé pour les fautes à 6 heures, je suis confronté à ma situation actuelle depuis hier soir et je commençais à fatiguer.

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 821
    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 821
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Finstor Voir le message
    Merci du conseil, le pire c'est qu'on utilisait des noms de la sorte mais notre professeur nous a fait changer les noms 😭
    Ben le souci, c'est qu'un nom long comme "colonne" devient vite chiant, mais un nom court comme "c" devient vite ensuite incompréhensible (noyé au milieu de "i", "l", o", etc...)
    Généralement un consensus veut que les trucs un peu pérenne (nb de lignes, nb de colonnes, etc) portent un nom court mais significatif (ex "col" ou "nbCol" ou "nb_col" selon tes goûts) et les trucs vraiment volatiles (indices de boucles, valeurs d'un dico surtout) portent un nom très court comme "i" pour "indice", "k" pour "key" et "v" pour "values".

    Citation Envoyé par Finstor Voir le message
    Pour compter les cellules voisines pour les côtés, comment suis-je censé m'y prendre ?
    Si tu pars de la cellule aux coordonnées "x, y", suffit de deux boucles imbriquées
    • la première avec i variant de x-1 à x+1
    • la seconde avec j variant de y-1 à y+1

    et tu comptes cellule[i][j] avec un test pour ne pas compter ta propre cellule (donc quand i=x et j=y) et d'autres tests pour ne pas dépasser les bords et voilà.

    Citation Envoyé par Finstor Voir le message
    J'ai pensé à utiliser "While" mais je bloque vraiment...
    Oui, ça arrive. Moi je veux visser un meuble. J'ai pensé à utiliser une scie sauteuse mais je bloque vraiment aussi.

    On n'utilise pas des outils au hasard. On sait ce qu'on veut faire, on sait comment le faire, on prend ensuite des outils adaptés au travail. while peut le faire mais une boucle "for" sera plus adéquate (for i in range (x-1, x+1+1)). Et connaitre la façon d'utiliser les susdits outils est un plus non négligeable (ex "pourquoi j'écris +1 en final ?")
    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. #5
    Invité
    Invité(e)
    Par défaut
    Rebonjour, c'est encore moi !
    Voilà, maintenant, un nouveau problème se pose
    Spyder m'indique : " local variable cellules is assigned to but never used" à la ligne 41. Le problème dans l'histoire, c'est qu'avant de changer ma variable n en cellules, le programme s’exécutait normalement. De plus, Spyder m'indique peu importe ce que je donne comme nom à la variable n.

    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
    from random import randint
    nb_col=int(input("Combien voulez-vous de colonnes ?"))
    nb_lig=int(input("Combien voulez-vous de lignes ?"))
     
     
    def maGrille(nb_lig,nb_col):
        maGrille=[]
        for i in range(nb_lig):
            grille=[]
            for j in range(nb_col):
                grille=grille+[randint(0,1)]
            maGrille=maGrille+[grille]
        return maGrille
     
    maGrille(nb_col,nb_lig)
     
     
    def affiche(grille):
        cellules=len(grille)
        for i in range(cellules):
            print(grille[i])
     
    affiche(maGrille)
     
    #Pour les angles :
     
    def Compter(grille,lignes,colonnes):
        if lignes==0 and colonnes==0:
            cellules=grille[1][0]+grille[1][1]+grille[0][1]
        if lignes==0 and nb_col-1==colonnes:
            cellules=grille[0][colonnes-2]+grille[1][colonnes-2]+grille[1][colonnes-1]
        if lignes==nb_lig-1 and nb_col==0:
            cellules=grille[nb_lig-2][0]+grille[nb_lig-2][1]+grille[nb_lig-1][1]
        if lignes==nb_lig-1 and nb_col-1==nb_col:
            cellules=grille[nb_lig-1][nb_col-2]+grille[nb_lig-2][nb_col-2]+grille[nb_lig-2][nb_col-1]

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 704
    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 704
    Par défaut
    Citation Envoyé par Finstor Voir le message
    Pour compter les cellules voisines pour les côtés, comment suis-je censé m'y prendre ?
    On part de (i, j).

    Pour tester si c'est un "coin", il faut que i ET j soient égaux à deux valeurs bien précises. Pour tester si c'est un "bord", il faut que i soit égal à 0 (ou à COLONNES) - peu importe j... (tant que ce n'est pas une des valeurs qui donnent un "coin").
    La difficulté va être d'utiliser "if" suivi d'une cascade de "elif"... mais c'est très formateur

    Après on peut sortir de la programmation et penser "algorithme" et le problème se ramène à trouver les index des cases voisines d'une case (i, j) d'un tableau MxN.
    Dans le cas général, pour avoir cette liste d'index on peut commencer par faire une double boucle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for dx in (-1, 0, 1):
         for dy in (-1, 0, 1):
              if dx == 0 and dy == 0:
                     continue
              print (i + dx, j + dy)
    Puis traduire "coin" et "bord" en restreignant la plage de valeurs prises par dx et dy. Donc remplacer (-1, 0, 1) par des variables:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for dx in DX_RANGE:
         for dy in DY_RANGE:
              if dx == 0 and dy == 0:
                     continue
              print (i + dx, j + dy)
    Ce qui fait qu'on n'a plus qu'a assigner (0, 1) à DX_RANGE si i vaut 0, (-1, 0) s'il vaut M ou (-1, 0, 1) sinon. Pareil pour DY_RANGE. Ce qui fait beaucoup moins de conditions à tester.

    On peut aussi ajouter un bord au tableau i.e. on plonge le tableau MxN dans un tableau plus grand M+2 x N+2. Les lignes 0 et N+1 et les colonnes 0 et M+1 sont remplies avec des valeurs qui vont bien (ici 0) et on interdit à l'utilisateur d'y accéder.

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

  7. #7
    Invité
    Invité(e)
    Par défaut
    Merci pour l'aide wiztricks mais je ne sais pas pourquoi Spyder m'indique un message d'erreur pour la variable "cellules" alors qu'avant, c'était la variable n et mon programme s'exécutait correctement

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 704
    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 704
    Par défaut
    Citation Envoyé par Finstor Voir le message
    Merci pour l'aide wiztricks mais je ne sais pas pourquoi Spyder m'indique un message d'erreur pour la variable "cellules" alors qu'avant, c'était la variable n et mon programme s'exécutait correctement
    Je vous ai déjà dit qu'il n'y avait pas de return dans votre fonction!
    Après pourquoi Spyder râle lorsque votre variable à plus d'un caractère? C'est une question "Spyder" qui ne change pas grand chose côté "Python": pas de "return".

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

Discussions similaires

  1. Programmation jeu de la vie Python
    Par Benecile dans le forum Général Python
    Réponses: 12
    Dernier message: 29/05/2015, 07h02
  2. Programmation du jeu de la vie
    Par TiteFleur014 dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 24/11/2014, 21h49
  3. programmation jeu de la vie
    Par darkontes dans le forum Caml
    Réponses: 6
    Dernier message: 13/03/2010, 18h20
  4. Programme c jeu de la vie
    Par gaet67 dans le forum C#
    Réponses: 1
    Dernier message: 14/05/2007, 07h39

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