在Python中实现新数据类型 - 没有类

时间:2018-02-28 22:12:25

标签: python class types fractions

我正在尝试在Python中实现新的数据类型“Fractions”来表示分数,其中numenator和denominator都是整数。而且,我必须实现四个基本的算术运算。诀窍是,我不能在这个任务中使用类。 我认为也许元组可能是一个好主意,但我真的不知道如何处理这个问题。 有没有简单的方法来解决这样的问题?任何暗示都会对我有所帮助。

2 个答案:

答案 0 :(得分:2)

你有两个问题。 1)如何封装数据,以及2)如何操作数据。

首先,让我们解决封装问题。把你需要的东西放在一个元组中:

half = (1,2)
whole = (1,1)
answer = (42,1)

请参阅?第一项是分子,第二项是分母。

现在您需要一种操作数据的方法。由于我们不能使用方法,我们只使用常规函数:

def mul(a,b):
    'Multiply two fractions'
    return (a[0]*b[0], a[1]*b[1])

同样,实施add(a,b)negate(a)sub(a,b)等。您可能需要simplify(),因此您最终不会以10240000/20480000结束一会儿。

为了使我们的面向对象的无类套件完整,我们需要一个构造函数:

def make_frac(num, denom):
    'Create a fraction with the indicated numerate and denominator'
    return (num, denom)

最后,将所有这些功能放在一个模块中,您的任务就完成了。你的图书馆用户会写这样的东西:

import your_fraction_lib

half = your_fraction_lib.make_frac(1,2)
quarter = your_fraction_lib.mul(half, half)
three_quaters = your_fraction_lib.add(half, quarter)

答案 1 :(得分:0)

如果你想要老师,你可以按照以下方式做点什么:

def construct(values):
    def mul(other_fraction):
        new_numerator = values['numerator']*other_fraction['values']['numerator']
        new_denominator = values['denominator']*other_fraction['values']['denominator']
        new_values = {'numerator':new_numerator,'denominator':new_denominator}
        return(construct(new_values))
    return({'values':{'numerator':values['numerator'],'denominator':values['denominator']},'mul':mul})

这允许您构造包含mul函数的对象,该函数与类方法非常相似:

x = construct({'numerator':1,'denominator':2})
y = construct({'numerator':3,'denominator':5})   
product = x['mul'](y)
print(product['values']['numerator'],product['values']['denominator'])
>>3 10