Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Autres questions


Index du Forum » Autres questions » Mes questions en Python.
Gab.c Hors ligne Membre Points: 449 Défis: 0 Message

Mes questions en Python.

Posté le 14/02/2016 18:23

Bonjours, je voudrai savoir si il est possible de faire ça :
nb_poisson [blue]=[/blue] [red]10[/red]
    [blue]for[/blue] i [blue]in[/blue] nb_poisson [blue]:[/blue]
    poisson[blue]+[/blue]str[blue]([/blue]i[blue])[/blue] [blue]=[/blue] [red]25[/red]



1, 2, 3, 4 ··· 9, 10, 11 Suivante
Lephenixnoir Hors ligne Administrateur Points: 24621 Défis: 170 Message

Citer : Posté le 14/02/2016 18:24 | #


poisson+str(i) = 25

Jamais. « poisson+str(i) » ne peux pas être une variable.
Utilise une liste plutôt.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Gab.c Hors ligne Membre Points: 449 Défis: 0 Message

Citer : Posté le 14/02/2016 18:45 | #


Comment ???

En fait : j'ai une class poisson ; je crée un nombre de poisson qui évolue au cours du jeu ; et a un moment, j'ai besoin de savoir l'âge de chaque poisson, je voudrais donc faire :

def reproduction (nb_poisson):
    for i in nb_poisson :
        age = poisson+str(i).temps()
        if age > 1
            nb_poisson_adulte += 1


Or tu me dit qu'on ne peut pas.
Mais que l'on peut avec des listes .
Comment SVP

Ps : Merci d'avoir répondu si vite.
Au soir de votre vie, le seigneur ne comptera pas le nombre de fois ou vous êtes tombés, il comptera le nombre de fois ou vous vous êtes relevés.

Labyrinthe : un jeu de réflexe unique, élu Jeu Du Mois !!!
Lephenixnoir Hors ligne Administrateur Points: 24621 Défis: 170 Message

Citer : Posté le 14/02/2016 18:51 | #


Je vais préciser un peu. Très peu de langage permettent d'écrire des programmes dans lesquels les noms des variables sont connus à l'exécution. C'est-à-dire que lorsqu'on désigne une variable dans le code, il ne peut s'agir que d'une seule variable et il ne doit pas y avoir de code à exécuter pour déterminer laquelle.

Lorsqu'on veut accéder à une variable via un entier (généralement), il est coutume d'utiliser des tableaux (ou plutôt ici, des listes) :
poissons = [ Poisson_1, Poisson_2, Poisson_3 ]
nb_poisson_adulte = 0
for poisson in poissons:
    age = poisson.temps()
    if age > 1:
        nb_poisson_adulte += 1

J'en profite pour signaler deux-trois choses :
- Il faut initialiser le compteur nombre nb_poisson_adulte.
- Il faut deux points pour ouvrir le bloc if.
- Ma boucle for est un peu spéciale, c'est propre à Python et très utilisé en Python. Voici une boucle plus proche de la tienne, dans laquelle la variable est l'indice de parcours de la liste :
for i in range(len(poissons)):
    age = poissons[i].temps()
    ...

Cependant, Python permet d'itérer sur une liste avec la syntaxe que j'ai utilisé, et la variable de la boucle (dans mon cas, « poisson ») prend successivement les valeurs de tous les éléments de la liste.

Si tu ne connais pas encore les listes en Python, je te conseille fortement d'aller lire un tutoriel parce que c'est beaucoup plus basique et fondamental que les objets. (Et pis vu la syntaxe que tu as utilisée tu ne dois pas avoir l'habitude de Python. )
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Gab.c Hors ligne Membre Points: 449 Défis: 0 Message

Citer : Posté le 14/02/2016 19:05 | #


En effet, ça fait plus d'un mois que je n'ai pas programmé en python et il faut que je reprenne en main la syntaxe (ça ne devrait pas être trop long )
Pas de problème avec les listes.
Mais là oui :
poissons = [ Poisson_1, Poisson_2, Poisson_3 ]

Je ne sait pas combien j'ai de poisson donc je ne vois pas comment je peut créer cette liste, le problème reste le même : je ne peut pas faire ça :
poisson = []
for i in nb_poisson :
    poisson[i] = poisson+str(i)


Ps :
Ma boucle for est un peu spéciale, c'est propre à Python et très utilisé en Python.
Qu'est ce qui est spécial.



Au soir de votre vie, le seigneur ne comptera pas le nombre de fois ou vous êtes tombés, il comptera le nombre de fois ou vous vous êtes relevés.

Labyrinthe : un jeu de réflexe unique, élu Jeu Du Mois !!!
Positon Hors ligne Rédacteur Points: 2396 Défis: 57 Message

Citer : Posté le 14/02/2016 19:07 | #


Lephenixnoir a écrit :
- Ma boucle for est un peu spéciale, c'est propre à Python et très utilisé en Python. Voici une boucle plus proche de la tienne, dans laquelle la variable est l'indice de parcours de la liste :
for i in len(poissons):
    age = poissons[i].temps()
    ...


Et voici la rectification de cette boucle :
for i in range(len(poissons)):
    age = poissons[i].temps()
    ...
Gab.c Hors ligne Membre Points: 449 Défis: 0 Message

Citer : Posté le 14/02/2016 19:11 | #


Pourquoi range() ???
Au soir de votre vie, le seigneur ne comptera pas le nombre de fois ou vous êtes tombés, il comptera le nombre de fois ou vous vous êtes relevés.

Labyrinthe : un jeu de réflexe unique, élu Jeu Du Mois !!!
Lephenixnoir Hors ligne Administrateur Points: 24621 Défis: 170 Message

Citer : Posté le 14/02/2016 19:11 | #


Gab.c a écrit :
Je ne sait pas combien j'ai de poisson donc je ne vois pas comment je peut créer cette liste, le problème reste le même : je ne peut pas faire ça
poisson = []
for i in nb_poisson :
    poisson[i] = poisson+str(i)


Non, pas de « poisson + str(i) », c'est illicite !
Tu n'as qu'à initialiser la liste vide :
poissons = []

Et rajouter des éléments au fur et à mesure :
poissons.append(nouveau_poisson)

Tu ne peux pas dire que tu connais les listes sans savoir ça...

Positon a écrit :
Et voici la rectification de cette boucle :
for i in range(len(poissons)):
    age = poissons[i].temps()
    ...

Oups, exact. Merci.

Gab.c a écrit :
Ma boucle for est un peu spéciale, c'est propre à Python et très utilisé en Python.
pourquoi ça.

Parce que la variable de boucle n'est pas l'indice dans la liste mais l'élément lui-même. Cette boucle est souvent appelée foreach dans les langages qui la supportent.

Ajouté le 14/02/2016 à 19:12 :
Gab.c a écrit :
Pourquoi range() ???

On peut rien faire pour toi là... >_< Il faut lire un minimum de tutoriel.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Gab.c Hors ligne Membre Points: 449 Défis: 0 Message

Citer : Posté le 14/02/2016 19:16 | #


poissons.append(nouveau_poisson)
Mais comment je sais si nouveau_poisson = poisson_1 ou 2 ou 100

Ajouté le 14/02/2016 à 20:15 :
???
Au soir de votre vie, le seigneur ne comptera pas le nombre de fois ou vous êtes tombés, il comptera le nombre de fois ou vous vous êtes relevés.

Labyrinthe : un jeu de réflexe unique, élu Jeu Du Mois !!!
Eltoredo Hors ligne Modérateur Points: 4301 Défis: 35 Message

Citer : Posté le 14/02/2016 20:16 | #


Gab, arrête d'up tes topics avec des points d'interrogation, attends que l'on te réponde.
La procrastination est une vertu. (voir ma description pour comprendre mon raisonnement)
Gab.c Hors ligne Membre Points: 449 Défis: 0 Message

Citer : Posté le 14/02/2016 20:23 | #


Excusez mon impatience
Au soir de votre vie, le seigneur ne comptera pas le nombre de fois ou vous êtes tombés, il comptera le nombre de fois ou vous vous êtes relevés.

Labyrinthe : un jeu de réflexe unique, élu Jeu Du Mois !!!
Lephenixnoir Hors ligne Administrateur Points: 24621 Défis: 170 Message

Citer : Posté le 14/02/2016 21:06 | #


Gab.c a écrit :
poissons.append(nouveau_poisson)
Mais comment je sais si nouveau_poisson = poisson_1 ou 2 ou 100???

Eh ben tu changes le paramètre ! >_<
poissons.append(poisson_1)
poissons.append(poisson_2)
poissons.append(poisson_100)

Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Gab.c Hors ligne Membre Points: 449 Défis: 0 Message

Citer : Posté le 14/02/2016 21:09 | #


Je ne sait pas combien j'ai de poisson donc je ne vois pas comment je peut créer cette liste, le problème reste le même : je ne peut pas faire ça :
poisson = []
for i in nb_poisson :
    poisson.append(poisson+str(i))


Désolé mais je ne comprends toujours pas comment faire
Au soir de votre vie, le seigneur ne comptera pas le nombre de fois ou vous êtes tombés, il comptera le nombre de fois ou vous vous êtes relevés.

Labyrinthe : un jeu de réflexe unique, élu Jeu Du Mois !!!
Lephenixnoir Hors ligne Administrateur Points: 24621 Défis: 170 Message

Citer : Posté le 14/02/2016 21:10 | #


Lis un cours de Python.

poissons = []

def creer_poisson():
        p = Poisson()
        poissons.append(p)

Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Gab.c Hors ligne Membre Points: 449 Défis: 0 Message

Citer : Posté le 14/02/2016 21:14 | #


Je suis un cours de 40 heurs niveau difficile sur openclassrooms

Ajouté le 14/02/2016 à 21:16 :
Je croix avoir trouvé une solution.
Merci pour ta patience

Ajouté le 14/02/2016 à 21:21 :
import random
poisson = []

class poisson :


    def _init_ (nom, nb_poisson, nb_male, nb_femelle):
        poisson.append(nom)
        age_p = 0
        nb_poisson += 1
        sexe = random.randint(1,2)
        if sexe = 1 :
            nb_male += 1
        else :
            nb_femelle += 1
        
    def temps (age_p, sexe):
        age_p += 1
        if age_p > 6 :
            nb_poisson_m += 1
            nb_poisson -= 1
            if sexe = 1 :
                nb_male -= 1
            else :
                nb_femelle -= 1
            
    def reproduction (nb_poisson):
        """poisson = []
        for i in nb_poisson :
            poisson[i] = poisson+str(i)
            age = poisson+str(i).temps()
            if age > 6
                nb_poisson_adulte += 1"""
            
        nb_couple = (nb_poisson - (nb_poisson % 2 ) ) / 2
        for i in nb_couple :
            nb_enfant = random.randint(5,10)
            for i in nb_enfant :
                poisson

            
            

class Aquarium :


    def _init_ :
        nb_aquarium += 1
        pop = 0
        
    def nouveau_poisson (pop):
        if pop < 20 :
            pop += 1
        else :
            nb_poisson_m += 1
            nb_poisson -= 1
            if sexe = 1 :
                nb_male -= 1
            else :
                nb_femelle -= 1
        


Voici mon code entier, je n'y arrive pas

Ajouté le 14/02/2016 à 21:29 :
Est ce que je peut faire ça quand je crée mon poisson
poisson_str(nb_poisson) = Poisson
poisson.append(poisson_str(nb_poisson))

Au soir de votre vie, le seigneur ne comptera pas le nombre de fois ou vous êtes tombés, il comptera le nombre de fois ou vous vous êtes relevés.

Labyrinthe : un jeu de réflexe unique, élu Jeu Du Mois !!!
Lephenixnoir Hors ligne Administrateur Points: 24621 Défis: 170 Message

Citer : Posté le 14/02/2016 21:30 | #


Comment tu peux coder de telles choses que de l'orienté objet sans connaître de telles choses que les listes ?

import random
poisson = []

class poisson :

Tu commences bien, la variable a le même nom que la classe. Règle générale de convention en programmation : les noms de classes prennent des majuscules. Donc Poisson sera mieux.

    def _init_ (nom, nb_poisson, nb_male, nb_femelle):
        poisson.append(nom)
        age_p = 0
        nb_poisson += 1
        sexe = random.randint(1,2)
        if sexe = 1 :
            nb_male += 1
        else :
            nb_femelle += 1

Il n'y a pas de self en premier argument : quand on écrit des méthodes, le premier argument c'est toujours self et c'est comme ça qu'on instancie des attributs (« self.attr = value » crée un attribut alors que « attr = value » ne crée, comme tu t'en doutes, qu'une variable locale). Les variables nb_poisson, nb_male, nb_femelle n'existent pas en-dehors de la fonction donc elles sont locales : le compteur ne sert à rien.

    def temps (age_p, sexe):
        age_p += 1
        if age_p > 6 :
            nb_poisson_m += 1
            nb_poisson -= 1
            if sexe = 1 :
                nb_male -= 1
            else :
                nb_femelle -= 1

Mêmes remarques, il manque le self et les compteurs ne servent à rien.

    def reproduction (nb_poisson):
        """poisson = []
        for i in nb_poisson :
            poisson[ i ] = poisson+str(i)
            age = poisson+str(i).temps()
            if age > 6
                nb_poisson_adulte += 1"""
            
        nb_couple = (nb_poisson - (nb_poisson % 2 ) ) / 2
        for i in nb_couple :
            nb_enfant = random.randint(5,10)
            for i in nb_enfant :
                poisson

C'est un hasard mais sache que quand on met une chaîne de caractères juste après une déclaration de fonction (ce qui serait une erreur de syntaxe dans la plupart des langages), on appelle ça une docstring et c'est censé contenir la documentation de la fonction. Là en occurrence, utilise des commentaires, des vrais. Même si l'absence de commentaire multiligne est embêtante.
« for i in nb_couple » ne veut rien dire. Il n'y a pas plusieurs éléments dans 4. Il y a des éléments dans range(4) = [ 0, 1, 2, 3 ]. Encore une fois, lis un cours sur les listes. Ou relis-le si tu as atteint les objets !
L'instruction « poisson » à la dernière ligne ne sert à rien. Si tu veux créer un poisson, il faut écrire « Poisson() » (en supposant que tu aies renommé conventionnellement la classe) et il faut passer en argument les arguments de __init__ (sauf le self, qui est ajouté au début quand on utilise des méthodes : on ne l'indique pas en argument mais il arrive tout seul). Et il faut ajouter un append à la liste des poissons, par exemple « poisson.append(Poisson(...)) ».

class Aquarium :


    def _init_ :
        nb_aquarium += 1
        pop = 0

Voilà une meilleur convention de nommage. Encore une fois, nb_aquarium et pop sont des variables locales, elles ne servent strictement à rien.

    def nouveau_poisson (pop):
        if pop < 20 :
            pop += 1
        else :
            nb_poisson_m += 1
            nb_poisson -= 1
            if sexe = 1 :
                nb_male -= 1
            else :
                nb_femelle -= 1

Cette fonction tombe à l'eau parce que toutes les variables sont locales. Il faut créer des attributs !


Ajouté le 14/02/2016 à 21:33 :
Gab.c a écrit :
Est ce que je peut faire ça quand je crée mon poisson
poisson_str(nb_poisson) = Poisson
poisson.append(poisson_str(nb_poisson))

Tu n'as pas compris le principe des variables. Il n'y a pas besoin d'appeler tes variables poisson_1, poisson_2, poisson_3. Tu peux avoir une fonction pour créer des poissons qui écrive « poisson = Poisson() » et « liste_poissons.append(poisson) », ça fonctionnera très bien. La variable « poisson » sera locale à la fonction. Tu n'est pas obligé d'utiliser des noms différents à chaque fois...
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Gab.c Hors ligne Membre Points: 449 Défis: 0 Message

Citer : Posté le 14/02/2016 21:35 | #


Pour ce qui est entre """ c'est un brouillon
Et je n'avais pas encore créé de variable globale.
Je te renvois un code plus propre

Ajouté le 14/02/2016 à 21:40 :
Tu n'as pas compris le principe des variables. Il n'y a pas besoin d'appeler tes variables poisson_1, poisson_2, poisson_3. Tu peux avoir une fonction pour créer des poissons qui écrive « poisson = Poisson() » et « liste_poissons.append(poisson) », ça fonctionnera très bien. La variable « poisson » sera locale à la fonction. Tu n'est pas obligé d'utiliser des noms différents à chaque fois...

Génial
Au soir de votre vie, le seigneur ne comptera pas le nombre de fois ou vous êtes tombés, il comptera le nombre de fois ou vous vous êtes relevés.

Labyrinthe : un jeu de réflexe unique, élu Jeu Du Mois !!!
Lephenixnoir Hors ligne Administrateur Points: 24621 Défis: 170 Message

Citer : Posté le 14/02/2016 21:53 | #


Je te rappelle pour information que quand tu écris ceci :
def une_fonction():
    variable = 1

La variable est dite locale à la fonction, donc elle n'existe que dans la fonction. Quand on sort de la fonction elle est détruite !
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Gab.c Hors ligne Membre Points: 449 Défis: 0 Message

Citer : Posté le 14/02/2016 22:00 | #


list_poissons = []
nb_poisson = 0
nb_poisson_m = 0
nb_male = 0
nb_femelle = 0
nb_aquarium = 0


import random

class Poisson :


    def _init_ (self, nb_poisson, nb_male, nb_femelle):
        self.age = 0
        self.sexe = random.randint(1,2)
        if sexe = 1 :
            nb_male += 1
        else :
            nb_femelle += 1
        nb_poisson += 1
        
    def temps (self.age, self.sexe):
        self.age_p += 1
        if self.age_p > 6 :
            nb_poisson_m += 1
            nb_poisson -= 1
            if sexe = 1 :
                nb_male -= 1
            else :
                nb_femelle -= 1
            
    def reproduction (self.age, nb_poisson):
        nb_poisson_adulte = 0
        for i in range(len(list_poissons)) :
            if list_poissons[i].age > 0 :
                nb_poisson_adulte += 1
        nb_couple = (nb_poisson_adulte - (nb_poisson_adulte % 2 ) ) /2
        for i in nb_couple :
            nb_enfant = random.randint(5,10)
            for i in nb_enfant :
                poisson = Poisson(nb_poisson, nb_male, nb_femelle)
                list_poissons.append(poisson)


J'ai laissé tomber l'aquarium pour l'instant. J’espère que c'est mieux.
Au soir de votre vie, le seigneur ne comptera pas le nombre de fois ou vous êtes tombés, il comptera le nombre de fois ou vous vous êtes relevés.

Labyrinthe : un jeu de réflexe unique, élu Jeu Du Mois !!!
Lephenixnoir Hors ligne Administrateur Points: 24621 Défis: 170 Message

Citer : Posté le 14/02/2016 22:06 | #


        if sexe = 1 :
            nb_male += 1
        else :
            nb_femelle += 1

if self.sexe == 1. Je rappelle que le test d'égalité c'est '==', note juste que si tu écris '=', tu affectes la valeur de la variable comme si tu écrivais « self.sexe = 1 » suivi de « if self.sexe: ».

    def temps (self.age, self.sexe):

Nope :
    def temps(self):

Comme ça.

            if sexe = 1 :

Attention au test d'égalité !

        for i in range(len(list_poissons)) :
            if list_poissons[i].age > 0 :
                nb_poisson_adulte += 1

Oui, mais utilise la boucle for idiomatique de Python :
for poisson in list_poissons:
    if poisson.age > 0:
        nb_poisson_adulte += 1


        for i in nb_couple :

range(nb_couple). Il y en a d'autres après mais je vais pas répéter.

                poisson = Poisson(nb_poisson, nb_male, nb_femelle)
                list_poissons.append(poisson)

Enlève les arguments. Les variables sont globales, inutiles de les passer en argument. Enlève-aussi des paramètres de __init__().

C'est mieux. Je pense qu'il faut utiliser global aussi pour accéder aux variables globales.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Gab.c Hors ligne Membre Points: 449 Défis: 0 Message

Citer : Posté le 14/02/2016 22:09 | #


Je pense qu'il faut utiliser global aussi pour accéder aux variables globales.

C'est à dire.
Merci merci merci beaucoup
Je vais me coucher et je continuerais demain
Au soir de votre vie, le seigneur ne comptera pas le nombre de fois ou vous êtes tombés, il comptera le nombre de fois ou vous vous êtes relevés.

Labyrinthe : un jeu de réflexe unique, élu Jeu Du Mois !!!
1, 2, 3, 4 ··· 9, 10, 11 Suivante

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 57 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd