2015-02-10 17 views
0

我有这个目前为止,但我得到了逐字下面看到溢出错误。它似乎不喜欢prod = num_1 + num_ 2行,因为这是触发错误的原因。Python3:溢出,但我甚至没有分配值

def p_mult(num_1, num_2): 
    prod = 0 
    while num_2 != 0: 
     if (num_1%2 != 0): # is odd? 
      num_1 = (num_1-1)/2 
      num_2 = (2 * num_2) + num_2 
      prod = num_1 * num_2 

     elif (num_1%2 == 0): # is even? 
      num_1 = num_1/2 
      num_2 = 2 * num_2 
      prod = num_1 * num_2 

    return prod 

,当我尝试我的模块,它在解释规定:... p_mult(3,38)

OverflowError: int too large to convert to float

我应该要设计一个农民乘法功能,但我必须执行看到的num_1值进行检查,如果它是偶数还是奇数,如果连,

num_1 = num_1/2 while num_2 = 2 * num_2 然后执行乘法,并

if num_1 odd: num_1 = (num_1 -1)/2 and num_2 = (2 * num_2) + num_2,然后执行乘法。

任何想法?

回答

0

经过一定量的测试后,我相信我已经确定了这个问题。不幸的是,在我写测试代码之前我没有意识到,但问题是num_2不会变为零,num_1会变得。而且,由于您的while循环仅在num_2上进行检查,因此num_1只会继续为零,而num_2会变得无限大,直到它无法再相乘。

这是我用来测试这一点,以供将来参考:

class Tester: 

    def get_num_1(self): 
     return self._num_1 

    def set_num_1(self, value): 
     print("num_1", value) 
     self._num_1 = value 

    def get_num_2(self): 
     return self._num_2 

    def set_num_2(self, value): 
     print("num_2", value) 
     self._num_2 = value 

    num_1 = property(get_num_1, set_num_1) 
    num_2 = property(get_num_2, set_num_2) 

    def p_mult(self): 

     prod = 0 
     while self.num_2 != 0: 
      if (self.num_1%2 != 0): # is odd? 
       self.num_1 = (self.num_1-1)/2 
       self.num_2 = (2 * self.num_2) + self.num_2 
       prod = self.num_1 * self.num_2 

      elif (self.num_1%2 == 0): # is even? 
       self.num_1 = self.num_1/2 
       self.num_2 = 2 * self.num_2 
       prod = self.num_1 * self.num_2 

     return prod 

t = Tester() 
t.num_1 = 5 
t.num_2 = 6 
t.p_mult() 
相关问题