0
votes

Python tandis que la boucle avec la croissance de l'organisation ne donne pas une sortie appropriée

J'essaie d'écrire un programme qui calcule la population d'organismes en croissance sur une certaine période:

Un biologiste local a besoin d'un programme pour prédire la croissance démographique. Les intrants seraient:

  • le nombre initial d'organismes
  • le taux de croissance (un nombre réel supérieur à 1)
  • Le nombre d'heures qu'il faut pour atteindre ce taux
  • Un nombre d'heures au cours de laquelle la population se développe

    Par exemple, on pourrait commencer par une population de 500 organismes, un taux de croissance de 2 et une période de croissance pour atteindre ce taux de 6 heures. En supposant qu'aucun des organismes meurt, cela impliquerait que cette population doublerait toutes les 6 heures. Ainsi, après 6 heures de croissance, nous aurions 1000 organismes et après 12 heures, nous aurions 2 000 organismes.

    Écrivez un programme qui prend ces entrées et affiche une prédiction de la population totale.

    Voici le code que j'ai jusqu'à présent: xxx

    J'ai traversé la logique plusieurs fois et ne peut pas comprendre pourquoi je peux 't obtenir la réponse réponse souhaitée de 80


11 commentaires

tandis que NUMOFHOURS> = TOTALHOURS: n'a pas l'air bien. Vous ne voulez pas dire <= ? (Pas encore passé le reste du code)


Vous ne pouvez pas avoir de nouvelles lignes dans des chaînes à moins que vous n'utilisiez des guillemets triples. Pourquoi avez-vous divisé l'entrée des invites sur 2 lignes?


@Barmar qui n'est que parce que mon éditeur de code repousse les lignes de ce côté parce qu'ils étaient trop longs.


L'éditeur de débordement de la pile ne fait pas cela. Mais de toute façon, corriger le code multiligne et ébranler > = (qui est immédiatement vrai) à <= vous permet de 70


OH @ROGANJOSH qui a aidé. Je ne suis pas à 70 pop mais je ne sais pas pourquoi ça ne me donnera pas 80


Parce que vous êtes absent de l'ajout de la culture de départ de 10. Vous calculez la croissance à chaque période, mais n'ayez pas ajouté à ce que vous avez commencé.


Numofhours + = Numofhours ne semble pas vrai.


Vous avez besoin d'une variable distincte pour le nombre d'heures d'exécution de la simulation, numofhours est déjà utilisé pour le temps nécessaire pour atteindre fréquence de grave .


@Barmar n'est-il pas le même que de compter + = 1? Mais au lieu de cela, j'ai utilisé des numofhours + = numofhours afin que cela puisse éventuellement arriver à 6 et la boucle finirait


@Barmar alors à quoi ressemblerait-il?


NuméroShours + = Numofhours est identique à celui numofhours * = 2 .


3 Réponses :


0
votes

Vous n'avez pas besoin d'une boucle, cela peut être calculé avec une formule simple pour la croissance exponentielle: xxx pré>

i utilise math.floor () code> parce que le formule peut produire des fractions si totalhours code> n'est pas un multiple de numofhours code>, mais vous ne pouvez pas avoir un demi-organisme. P>

Si vous devez vraiment utiliser une boucle, vous avez deux problèmes. p>

Premièrement, votre condition de boucle est en arrière, il devrait utiliser Utiliser plutôt que > = p>

second, numofhours + = numofhours code> double cette variable à chaque fois. Vous devez utiliser une variable distincte pour le moment où la simulation est en cours d'exécution. P>

Troisième, vous n'avez pas besoin de multiplier les organismes code> et également l'ajouter à Totalorganisms code>. Il suffit de multiplier les organismes code> par le taux de croissance, qui sera le nouveau nombre total d'organismes. P> xxx pré>

mais si totalhours code> n'est pas un multiple de numofhours code>, cela ignorera la croissance au cours de la dernière période partielle. P>

La formule équivalente qui ignore la période partielle utiliserait une division entière: P>

totalOrganisms = organisms * rateOfGrowth ** (totalHours // numOfHours)


9 commentaires

Cela fonctionne pour la plupart des chiffres, mais ce cas de test, par exemple, qui ne fonctionne pas: entrez le nombre initial d'organismes: 100 Entrez le taux de croissance [un nombre réel> 0]: 5 Entrez le nombre d'heures pour atteindre le taux de croissance. : 2 Entrez les heures de croissance totales: 25 La population totale est 54591503356


Quelle devrait être la réponse à la place?


24414062500 est ce que la réponse est censée être. idk pourquoi mais votre équation fonctionne avec mes trois autres chèques de problèmes à côté de celui-ci


C'est la bonne réponse pour les heures totales = 24, pas 25. Vous ignorez la croissance au cours de la dernière heure.


Vous supposez que la croissance arrive instantanément toutes les 2 heures, tous les organismes scindés simultanément en 5.


Oh, tu as raison. Peut-être que c'est un type dans mes devoirs. Merci pour votre aide!


Peut-être qu'ils ont également fait que simplifier l'hypothèse. J'ai ajouté une formule pour cela.


Oh oui! Ça l'a fait!


La croissance démographique n'est pas vraiment un processus continu. Ce que vous avez vraiment besoin de savoir, c'est combien de fois chaque organisme donne naissance aux enfants et combien d'enfants il a. C'est en fait une séquence Fibonacci.



0
votes
organisms = int(input("Enter the initial number of organisms:"))
rateOfGrowth = int(input("Enter the rate of growth : "))
numOfhours = int(input("Enter the number of hours to achieve the rate of growth: "))
totalhours = int(input("Enter the total hours of growth: "))
hours=0
while (hours <= totalhours):
    organisms*=rateOfGrowth
    hours += numOfhours
    if (hours==totalhours):
        break
print("The total population:" ,organisms)

1 commentaires

C'est génial si vous pouvez ajouter des explications.



0
votes
number = int(input("Enter the initial number of organisms: "))
rate = float(input("Enter the rate of growth [a real number > 1]: "))
cycleHours = int(input("Enter the number of hours to achieve the rate of growth:"))
totalHours = int(input("Enter the total hours of growth: "))
cycles = totalHours // cycleHours
for eachPass in range(cycles):
    number = number * rate
    print("The total population is", int(number))

0 commentaires