2014-06-09 29 views
0

decimal.InvalidOperation:[]的Python:關於 「分裂不可能的」 錯誤

上述錯誤想出了在下面的代碼的第15行(其與while語句的行):

from decimal import *  
accuracy = 60  
getcontext().prec = accuracy 


def function(): 
    for element in range(1, 50): 
     var_a = Decimal(1)/Decimal(element) 
     count = 1 
     if round(var_a, accuracy - 10) == var_a: 
      print((element, 0)) 
      continue 
     while (var_a * (10**count)) - ((var_a * (10**count)) % 1) != int: 
      count += 1 
     print((element, count)) 

function() 

我正在嘗試編寫代碼以查明給定範圍的分數的循環週期有多長(例如,1/6是0.16666,並且有1位數的循環週期,而1/11是0.090909090909 ...並且有2位數的復發週期)。

我真的不知道錯誤意味着什麼或者我能做些什麼。

感謝您的幫助。

編輯:爲BrenBarn,

文件 「C:/用戶/路易·麥康奈爾/ PycharmProjects /總理的東西/互惠cycles.py」,第15行,在功能上

while (var_a * (10**count)) - ((var_a * (10**count)) % 1) != int: 

decimal.InvalidOperation: [類 'decimal.DivisionImpossible']

+1

請粘貼完整的錯誤信息。 – BrenBarn

+2

您無法將數字與「int」進行比較 - 這是一種內置函數。即使它運行,你也不會得到你期望的結果。您需要使用其他方法來檢查數字是否爲整數。 – Tim

+0

你爲什麼要做'%1'?你期望做什麼? – user2357112

回答

1

使用:

def is_integral(d): 
    return d.to_integral() == d 

while not is_integral(var_a * (10**count)) - ((var_a * (10**count)) % 1):