为什么收到类型错误?

2024-09-22 16:37:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我的代码如下:

class Fraction:
"""Class for performing fraction arithmetic.
Each Fraction has two attributes: a numerator, n and a deconominator, d.
Both must be integer and the deonominator cannot be zero."""

def __init__(self, n , d):
    """Performs error checking and standardises to ensure denominator is positive"""
    if type(n)!=int or type(d)!=int:
        raise TypeError("n and d must be integers")
    if d==0:
        raise ValueError("d must be positive")
    elif d<0:
        self.n = -n
        self.d = -d
    else:
        self.n = n
        self.d = d

def __str__(self):
    """Gives string representation of Fraction (so we can use print)"""
    return(str(self.n) + "/" + str(self.d))

def __add__(self, otherFrac):
    """Produces new Fraction for the sum of two Fractions"""
    newN = self.n*otherFrac.d + self.d*otherFrac.n
    newD = self.d*otherFrac.d
    newFrac = Fraction(newN, newD)
    return(newFrac)

def __sub__(self, otherFrac):
    """Produces new Fraction for the difference between two Fractions"""        
    newN = self.n*otherFrac.d - self.d*otherFrac.n
    newD = self.d*otherFrac.d
    newFrac = Fraction(newN, newD)
    return(newFrac)

def __mul__(self, otherFrac):
    """Produces new Fraction for the product of two Fractions"""        
    newN = self.n*otherFrac.n
    newD = self.d*otherFrac.d
    newFrac = Fraction(newN, newD)
    return(newFrac)

def __truediv__(self, otherFrac):
    """Produces new Fraction for the quotient of two Fractions"""        
    newN = self.n*otherFrac.d
    newD = self.d*otherFrac.n
    newFrac = Fraction(newN, newD)
    return(newFrac)

def __eq__(self, otherFrac):
    return(self.n * otherFrac.d) == (self.d * otherFrac.n)

def gcd(self):
    gcd = 1
    if self.n % self.d == 0:
        return self.d
    for k in range(int(self.d / 2), 0, -1):
        if self.n % k == 0 and self.d % k == 0:
            gcd = k
            break
    return gcd

def simFrac(self):
    newN = self.n / f.gcd()
    newD = self.d / f.gcd()
    newFrac = Fraction(newN, newD)
    return (newFrac)

当我尝试运行simFrac()的进度时,系统出现了一个错误。你知道吗

这是我的测试:

f=Fraction(30,18)
f.gcd()
6 #The output of f.gcd()

我们试着输入f.simFrac()

结果会出现如下错误:

Traceback (most recent call last):
  File "<pyshell#6>", line 1, in <module>
    f.simFrac()
  File "C:/Users/Kavan/Documents/Python/resit CE/Q4.py", line 67, in simFrac
    newFrac = Fraction(newN, newD)
  File "C:/Users/Kavan/Documents/Python/resit CE/Q4.py", line 9, in __init__
    raise TypeError("n and d must be integers")
TypeError: n and d must be integers

我知道函数(simFrac)中的整数有一个错误,但我不知道怎么解,有人能告诉我怎么解吗?你知道吗


Tags: andselfforreturndefbetwomust