J'essaye de passer un objet pour qu'il soit modifié par la méthode définie infection. Cependant, lorsque je le transmets, comme je le montre ci-dessous, il ne le fait qu'une seule fois. C'est ma première expérience de création d'objets dynamiques, donc je ne sais pas trop comment faire pour que ça continue.

class Region:
    def __init__(self, name, population, cases, deaths):
        self.name = name
        self.population = population
        self.cases = cases
        self.deaths = deaths
        print(name, cases)       

    def infection(self, name, population, cases):
        while population > cases:
            cases = cases + 1
            return (cases)        
    
westernEurope = Region("Western Europe", 1000000, 0, 0)
print(westernEurope.infection("Western Europe", 1000000, 0))

Ce que je veux, c'est que la méthode d'infection continue à s'incrémenter jusqu'à ce qu'elle atteigne le nombre de cas, mais je dois aussi pouvoir imprimer chaque incrémentation. Toute aide est très appréciée.

1
Aran Khalastchi 24 janv. 2021 à 15:47

3 réponses

Meilleure réponse

Vous avez un problème d'indentation avec votre code.

Cela devrait fonctionner pour vos besoins:

class Region:
    def __init__(self, name, population, cases, deaths):
        self.name = name
        self.population = population
        self.cases = cases
        self.deaths = deaths
        print(name, cases)       

    def infection(self, name, population, cases):
        while population > cases:
            cases = cases + 1
            print(cases)
        return (cases)        
    
westernEurope = Region("Western Europe", 1000000, 0, 0)
print(westernEurope.infection("Western Europe", 1000000, 0))
0
Krishna Chaurasia 24 janv. 2021 à 12:52

Infection () change les cas d'attribut de classe et l'affiche à chaque boucle

class Region:
    def __init__(self, name, population, cases, deaths):
        self.name = name
        self.population = population
        self.cases = cases
        self.deaths = deaths
    
    def infection(self):
        while self.population > self.cases:
            self.cases += 1
            print(self.name, self.cases)        
    
westernEurope = Region("Western Europe", 100, 0, 0)
westernEurope.infection()
0
Emanuele 24 janv. 2021 à 12:59

C'est parce que return termine immédiatement l'exécution de la fonction, donc n'ayez pas la boucle while dans la fonction mais dans votre zone principale, comme ceci:

def infection(self, name, population, cases):
    cases = cases + 1

while population > cases:
    infection(pass all parameters)
-1
Shambhav Gautam 24 janv. 2021 à 12:52
65870696