2016-06-28 4 views
-2

извините, я немного новичок с программированием, но получаю ошибку с поплавковым делением в простой цикл, который я не уверен, как исправить.избегая деления на ноль с плавающей точкой в ​​циклах - python

Вот код в 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 

Выполнение этого кода дает ошибку деления на ноль. которые я не могу исправить. Может ли кто-нибудь сказать мне, как исправить это?

+0

Вы устанавливаете 'q' в ноль и после первого случайного менее или равного 0.5 у вас есть деление на ноль - простое. – Artur

+0

привет, спасибо за помощь, что я понял, что замена y = p/q на y = p/(q + 0,000001) решает проблему. Хотя это немного напоминает обман, но он работает! –

ответ

0

Вы получаете нулевую ошибку деления из-за этого кода

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

Вы инициированную д = 0, таким образом, когда во время цикла запуска в первый раз, и если х < = 0,5, то р будет увеличиваться, но д будет равным нулю, и на следующем шаге вы делите p на q (что равно нулю). Перед выполнением деления нужно поставить условие проверки, чтобы знаменатель не был равен нулю. Вы можете исправить это следующим образом.

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

Это всего лишь одно решение, так как я не знаю, что вы пытаетесь сделать в своем коде.

Смежные вопросы