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]



Précédente 1, 2, 3, 4, 5, 6 ··· 9, 10, 11 Suivante
Gab.c Hors ligne Membre Points: 449 Défis: 0 Message

Citer : Posté le 16/02/2016 12:55 | #


En fait, J'ai récupéré un sujet de mon frère qui est en deuxième année d'école d'ingénieur à l'icam (Toulouse) :
http://tinyurl.com/z93qhtf

Mais après avoir essayé de construire le plan de mon code, je ne savais pas du tout par où commencer aussi je suis un peu parti dans tous les sens.

Ajouté le 16/02/2016 à 12:59 :
Une fois que tu l'auras vu, je supprimerai le lien.
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 En ligne Administrateur Points: 24227 Défis: 170 Message

Citer : Posté le 16/02/2016 13:03 | #


J'ai une erreur. L'erreur varie entre 404 et 500...
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 16/02/2016 13:06 | #


De quoi tu parle
C'est toi qui as changé l’adresse URL
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 En ligne Administrateur Points: 24227 Défis: 170 Message

Citer : Posté le 16/02/2016 13:07 | #


Non, je l'ai passé à une tinyurl pour éviter la déformation de la page. Je l'ai testée entre temps (quand même ), mais j'avais des erreurs de la part de gmail.
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 16/02/2016 13:11 | #


Merci, c'est vrai que c'était gênant.
Mais finalement t'as pu regarder ou pas.
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 En ligne Administrateur Points: 24227 Défis: 170 Message

Citer : Posté le 16/02/2016 13:13 | #


Non, le lien original me renvoie une erreur. J'aurais tendance à penser que ce serait parce que tu as envoyé une url de près ou de loin liée à ton compte et/ou les paramètres de ta connexion actuelle et que ça ne fonctionne pas quand je me connecte au site via mon compte.
Tu ne peux pas héberger le fichier ailleurs ? Au pire, mets-le en fichier joint d'un post s'il n'est pas trop gros.
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 16/02/2016 13:20 | # | Fichier joint


Voilà
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 En ligne Administrateur Points: 24227 Défis: 170 Message

Citer : Posté le 16/02/2016 13:31 | #


C'était pas trop mal. Commence par définir la classe Poisson. Différentes méthodes :
→ nourrir()
→ reproduire(), mais attention : cette méthode ne doit servir qu'à mettre à jour une valeur interne au poisson indiquant qu'il s'est reproduit pendant le mois en cours
→ temps(), qui remet à jour les capacités de reproduction et le besoin de nourriture, ou bien tue le poisson s'il n'a pas mangé

Ensuite tu peux passer à la classe Aquarium :
→ nourrir(), qui utilisent tes ressources en conserves (disons globales) pour nourrir les poissons
→ reproduire(), qui tente de reproduire les poissons par couple
→ temps(), qui va appeler la méthode temps() de chacun des poissons et retirer les poissons morts, tuer ceux qui sont en excès, etc.

La classe Conserve n'a pas besoin d'exister, tu peux te contenter d'un entier pour compter le nombre de portions dont tu disposes.
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 16/02/2016 13:44 | #


Ok merci beaucoup, je vais essayer.

Ajouté le 16/02/2016 à 14:00 :
→ nourrir()
→ reproduire(), mais attention : cette méthode ne doit servir qu'à mettre à jour une valeur interne au poisson indiquant qu'il s'est reproduit pendant le mois en cours

Je ne vois pas l’intérêt de ces méthodes dans la class 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 En ligne Administrateur Points: 24227 Défis: 170 Message

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


Bon point.
Techniquement tu peux gérer directement dans l'aquarium, si le poisson n'a pas mangé alors il meurt, c'est tout à fait faisable.
Mais lorsque la situation va se complexifier, si tu introduis par exemple, des maladies qui se propagent à la reproduction alors décider si le poisson doit mourir ou non est plus compliqué. Dans ce cas-là, l'évaluation des facteurs et la prise de décision doit se faire dans la classe Poisson.
C'est pour respecter ce schéma que j'ai introduit ces méthodes.
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 16/02/2016 15:10 | #


import os
import random

argent = 0
nouriture = 20
aquarium = Aquarium()

def achat_nouriture () :
    global nouriture
    global argent
        for c in nb_conserve :
        nouriture += 20
        argent -= 10



class Poisson :


    def __init__ (self):
        self.age = 0
        self.sexe = random.randint(1,2)
        self.capacite_reproduction = 0
        self.besoin_nourriture = 1
        self.vie = 1
    
    def temps (self):
        self.age += 1
        self.capacite_reproduction = 1
        self.besoin_nourriture = 1
        if self.age > 6 :
            global nb_poisson_m
            nb_poisson_m += 1
            self.vie = 0
            
        
    def reproduction (self):
        self.capacite_reproduction = 0
                
    def repas (self) :
        self.besoin_nourriture = 0
        

        
class Aquarium :


    def __init__ (self ):
        self.pop = []
        global argent
        argent -= 30
        poisson = Poisson()
        poisson.sexe = 1
        aquarium.nouveau_poisson()
        poisson = Poisson()
        poisson.sexe = 2
        aquarium.nouveau_poisson()
            
    def reproduction (self ):
        nb_p_m_adulte = 0
        nb_p_f_adulte = 0
        for poisson in self.pop :
            if poisson.age > 0 and poisson.sexe == 1:
                nb_p_m_adulte += 1
            if poisson.age > 0 and poisson.sexe == 2:
                nb_p_f_adulte += 1
        if nb_p_m_adulte > nb_p_f_adulte :
            nb_couple = nb_p_f_adulte
        else :
            nb_couple = nb_p_m_adulte
        for i in range(nb_couple) :
            nb_enfant = random.randint(5,10)
            for i in range(nb_enfant) :
                poisson = Poisson()
                aquarium.nouveau_poisson()
                
    def vente (self ) :
        global argent
        for p in nb_vendu :
            argent += 1.5
            del self.pop[-1]
        
    def repas (self) :
        poisson_a_nourir = len(self.pop)
        while nouriture > 0 or poisson_a_nourir > 0 :
            self.quantite -= 1
            poisson_a_nourir -= 1
        if poisson_a_nourir == 0 :
            return
        elif self.quantite == 0 :
            for p in range(poisson_a_nourir) :
                del list_poissons[-1]
            global nb_poisson_m
            nb_poisson_m += poisson_a_nourir
        
    def nouveau_poisson (self ):
        if len(self.pop) < 21 :
            self.pop.append(poisson)
        else :
            global nb_poisson_m
            nb_poisson_m += 1
            
    def temps (self ) :
        for poisson in self.pop :
            poisson.temps()
            if poisson.vie == 0 :
                del poisson

Voilà, je pense que c'est mieux.
Mais pour la méthode temps() de la class aquarium, je ne sais pas comment supprimer le poisson de la liste des poisson de l'aquarium (si il est mort ).

Ajouté le 16/02/2016 à 15:16 :
Pour l'instant, les méthodes repas() et reproduction() de la class poisson ne serve à rien.
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 En ligne Administrateur Points: 24227 Défis: 170 Message

Citer : Posté le 16/02/2016 15:17 | #


    for c in nb_conserve :

Non !

N'oublie pas de tuer aussi le poisson dans la méthode temps() s'il n'a pas eu à manger (besoin_nourriture = 1, mais avant la remise à 1).

Au lieu de retirer 30 euros d'argent à la création d'un aquarium, il paraît intéressant de le faire dans la fonction qui crée l'aquarium. Tout simplement parce que cette fonction devra tester si tu as au moins 30 euros avant de te donner un aquarium, donc autant centraliser

Pour retirer un élément d'une liste :
liste.remove(element)

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 16/02/2016 15:23 | #


Pour retirer un élément d'une liste :
liste.remove(element)

Oui mais les éléments s'appellent tous 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 En ligne Administrateur Points: 24227 Défis: 170 Message

Citer : Posté le 16/02/2016 15:35 | #


Tu n'as définitivement pas compris ce qu'était une variable. Une variable n'est qu'une donnée en mémoire, le nom on s'en fout. Tu peux avoir une seule variable qui porte deux noms. Tu peux aussi avoir des variables qui ne portent pas de nom. Le nom ne fait pas la variable.

Non, les éléments de ta liste ne s'appellent pas poisson. Les noms des variables ne sont pas connus à l'exécution dans la plupart des langages. Le programme sait juste que la variable se trouve à tel endroit de la mémoire, son nom il l'a oublié pendant la compilation (à la volée parfois). C'est pour ça que tu ne peux pas écrire « entier_str(i) = 2 », parce que le nom d'une variable n'a aucun sens à l'exécution. Ça n'existe plus.

Ici c'est pareil. Si tu lui dis « retire-moi l'objet poisson de la liste » il ne cherche pas par le nom. Il cherche par la donnée. Il ne va pas sélectionner l'élément à retirer sur le nom, mais sur l'égalité avec la variable que tu manipules dans la fonction appelante sous le nom de poisson. Il va retirer de la liste le premier poisson égal à celui que tu lui donnes en paramètre.

Prenons un autre exemple.
liste = []
for i in range(4):
    liste.append(i)
liste.remove(3)

Tu crois vraiment que le programme va chercher un élément qui s'appelle 3 ?
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 16/02/2016 15:49 | #


D'accord mais je ne comprends toujours pas ce que je dois mettre en paramètre de remove() car mes objet de la class poisson sont eux-même constitués d'autres objets. Or c'est la variable vie (un de ces objets) qui m’intéresse il faudrait donc que je fasse un truc qui ressemble à ça même si ce n'est pas possible :
self.pop.remove(poisson.vie = 0)

Je sais que ce n'est pas possible
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 En ligne Administrateur Points: 24227 Défis: 170 Message

Citer : Posté le 16/02/2016 15:57 | #


Il faut itérer et faire quelque chose comme :
for poisson in self.pop:
    if poisson.vie == 0:
        self.pop.remove(poisson)

Au passage, il faut que tu aies le réflexe, le test d'égalité c'est '=='. Donc même si c'est faux, il faut écrire 'poisson.vie == 0'.
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 16/02/2016 16:02 | #


J'ai enfin compris.
Merci

Ajouté le 16/02/2016 à 16:34 :
Ça marche enfin :
import os
import random


def achat_nouriture (nb_conserve) :
    global nouriture
    global argent
    if nb_conserve*10 <= argent :
        for c in range(nb_conserve) :
            nouriture += 20
            argent -= 10
            
def achat_aquarium (nb_aquariums, list_aquariums) :
    global argent
    if nb_aquariums*30 <= argent :
        for a in range(nb_aquariums) :
            argent -= 30
            aquarium = Aquarium()
            list_aquariums.append(aquarium)


class Poisson :


    def __init__ (self):
        self.age = 0
        self.sexe = random.randint(1,2)
        self.capacite_reproduction = 0
        self.besoin_nourriture = 1
        self.vie = 1
    
    def temps (self):
        self.age += 1
        if self.age > 6 or self.besoin_nourriture == 1:
            global nb_poisson_m
            nb_poisson_m += 1
            self.vie = 0
        self.capacite_reproduction = 1
        self.besoin_nourriture = 1    
        
    def reproduction (self):
        self.capacite_reproduction = 0
                
    def repas (self) :
        self.besoin_nourriture = 0
        

        
class Aquarium :


    def __init__ (self ):
        self.pop = []
        poisson = Poisson()
        poisson.sexe = 1
        self.nouveau_poisson(poisson)
        poisson = Poisson()
        poisson.sexe = 2
        self.nouveau_poisson(poisson)
            
    def reproduction (self ):
        nb_p_m_adulte = 0
        nb_p_f_adulte = 0
        for poisson in self.pop :
            if poisson.age > 0 and poisson.sexe == 1:
                nb_p_m_adulte += 1
            if poisson.age > 0 and poisson.sexe == 2:
                nb_p_f_adulte += 1
        if nb_p_m_adulte > nb_p_f_adulte :
            nb_couple = nb_p_f_adulte
        else :
            nb_couple = nb_p_m_adulte
        for i in range(nb_couple) :
            nb_enfant = random.randint(5,10)
            for i in range(nb_enfant) :
                poisson = Poisson()
                self.nouveau_poisson(poisson)
                
    def vente (self, nb_poissons ) :
        global argent
        for p in nb_poissons :
            argent += 1.5
            del self.pop[-1]
        
    def repas (self) :
        poisson_a_nourir = len(self.pop)
        global nouriture
        for poisson in self.pop :
            if nouriture > 0 :
                nouriture -= 1
                poisson.repas()
            else :
                break
        
    def nouveau_poisson (self , poisson):
        if len(self.pop) < 20 :
            self.pop.append(poisson)
        else :
            global nb_poisson_m
            nb_poisson_m += 1
            
    def temps (self ) :
        for poisson in self.pop :
            poisson.temps()
            if poisson.vie == 0 :
                self.pop.remove(poisson)
                

            
argent = 200
nouriture = 20
aquarium = Aquarium()
list_aquariums = [aquarium]    
                
                
while 1 :
    nb_poisson_m = 0
    poissons = 0
    for aquarium in list_aquariums :
        aquarium.reproduction()
        aquarium.repas()
        aquarium.temps()
        poissons += len(aquarium.pop)
    print(nb_poisson_m, "sont morts")
    print("Vous possédez :")
    print(argent, " $")
    print(poissons, " poissons")
    print(len(list_aquariums), " aquariums")
    print(nouriture, "rations de nouritures")
    nb_aquariums = int(input("Combiens d'aquariums voulez vous acheter :"))
    nb_conserves = int(input("Combiens de conserve voulez vous acheter :"))
    nb_poissons = int(input("Combiens de poissons voulez vous vendre :"))
    if nb_aquariums > 0 :
        achat_aquarium (nb_aquariums, list_aquariums)
    if nb_conserves > 0 :
        achat_nouriture (nb_conserves)
    if nb_poissons > len(list_aquariums[-1].pop) :
        list_aquariums[-1].vente(nb_poissons)
    if argent == 0 :
        print ("Perdu")
        os.system("pause")
        break
    if argent >= 1000 :
        print ("Gagné !!!")

Bon le système de vente n'est pas au point(du tout ) mais ça marche.
Je voulais quand même que tu vois le code terminé (presque).
En tout cas merci beaucoup beaucoup pour ton aide et ta patience .
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 En ligne Administrateur Points: 24227 Défis: 170 Message

Citer : Posté le 16/02/2016 17:01 | #


Ce code commence à ressembler à quelque chose
N'hésite pas à pratiquer quelques exemples plus simples, et vérifie que tu as bien compris tous les concepts importants, le reste viendra avec l'expérience
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 16/02/2016 17:15 | #


Merci

Ajouté le 18/02/2016 à 21:14 :
Bonjour, une petite question :
def temps (self ) :
        for poisson in self.pop :
            poisson.temps()
            if poisson.vie == 0 :
                self.pop.remove(poisson)

Dans cette méthode, j'ai une boucle for qui parcoure une liste or dans la boucle je modifie la liste ma question est : est-ce-que ça modifie le parcours de la liste ??? (je pense que oui).
Et cela me pose un gros problème :
En effet ,voici un exemple :
je pars avec 8 poissons dans ma liste ; les 4 premiers sont en pleine forme donc pas de problème ; mais les 4 derniers n'ont pas mangés il doivent donc mourir, les 2 premiers meurent mais cela à modifié le parcours de ma liste (car la liste a été raccourci ) et ainsi, les deux derniers ne meurent pas Problème.
La deuxième question est donc comment je fais pour parer ce problème.

Je ne suis pas sûr que vous avez tous compris du premier coup alors relisez SVP ce n'est pas si compliqué, ne m'abandonnez pas

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 En ligne Administrateur Points: 24227 Défis: 170 Message

Citer : Posté le 18/02/2016 22:13 | #


En effet, c'est un phénomène à surveiller !
>>> liste = list(range(5))
>>> for el in liste:
...         if el == 2 or el == 3:
...                 liste.remove(el)
...
>>> liste
[0, 1, 3, 4]
>>>

N'oublie pas que le parcours des listes se fait sur des indices et que retirer un élément saute une entrée dans la boucle !

Pour résoudre ton problème, il te suffit de créer une nouvelle liste. J'en profite pour écrire une compréhension :
def temps(self):
        for poisson in self.pop:
                poisson.temps()
        self.pop = [poisson for poisson in self.pop if poisson.vie]

Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Dark storm En ligne Labélisateur Points: 11634 Défis: 176 Message

Citer : Posté le 19/02/2016 08:09 | #


Au passage, est-ce vraiment pertinent d'appeler un attribut "pop" alors que celui-ci est communément utilisé en tant que méthode bien particulière de la plupart des classes ? (Dont les listes)
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Précédente 1, 2, 3, 4, 5, 6 ··· 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 73 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