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