2016-06-28 1 views
-2

désolé je suis un peu un débutant avec la programmation mais je reçois une erreur de division flottante dans une boucle simple dont je ne suis pas sûr comment rectifier.éviter la division de flotteur zéro dans les boucles - python

est ici un code en python 2,7

import random 

N = 100 
A = [] 
p = 0 
q = 0 

k = 1 
while k<=N: 
    x = random.random() 
    if x<= 0.5: 
     p+= 1 
    else: 
     q+=1 
    y = p/q 
    A.append(y) 
    k+=1 

L'exécution de ce code donne une erreur de division zéro. que je ne suis pas capable de rectifier. Quelqu'un peut-il me dire comment rectifier cela?

+0

Vous définissez 'q' sur zéro et après un premier aléatoire inférieur ou égal à 0.5 vous avez une division par zéro - simple. – Artur

+0

hey les gars merci pour l'aide, ce que j'ai compris c'est que remplacer y = p/q avec y = p/(q + 0.000001) résout le problème. Bien que cela ressemble un peu à de la triche, mais ça marche! –

Répondre

0

Vous obtenez une erreur de division zéro en raison de ce code

if x <= 0.5: 
    p+=1 
else: 
    q+=1 
y= p/q 

Vous avez initialisées q = 0 Ainsi, lorsque la boucle while est exécutée première fois et si x < = 0,5, alors p est incrémenté mais q serez égal à zéro et à l'étape suivante, vous divisez p par q (qui est zéro). Vous devez mettre une condition de vérification avant d'effectuer la division afin que le dénominateur ne soit pas nul. Vous pouvez le rectifier de la manière suivante.

if x <= 0.5: 
    p+=1 
else: 
    q+=1 
if (q == 0): 
    print "Denominator is zero" 
else: 
    y= p/q 

Ceci est juste une solution car je ne sais pas ce que vous essayez de faire dans votre code.