2013-07-29 21 views
-5

所以我試圖在python中創建以下類:Python:運算符重載的有用Rational類

該類應該使用整型實例變量來存儲有理數的分子和分母。 有理數必須以簡化形式存儲。 有理數的符號反映在分子的符號中。 該類必須執行數據驗證以確保分母不爲零。

而且我想包含以下重載opeartors: +和 - 算術運算符 + - */// 這些運營商應該與參數類型的組合如下工作: (有理,有理) (理性,INT) (INT,理性) 關係運算符 這些是二元操作< < = ==> => = 這些運算應與參數類型的以下組合工作: (理性,理性) (理性,int) (INT,理性)

我也希望兩個不同的存取方法: 分子,它返回有理數的分子分母 ,返回有理數的分母

謝謝你們!

+1

親愛的Stackoverflow:我有這個想法,我已經決定了一些有用的東西,請爲我建立它。聘請承包商,我們不在這裏爲你做你的工作。 –

+0

*僱用志願者獲得薪酬:D – Houdini

+0

Timothy Budd的「C++數據結構」具有非常棒的Rational類實現。將其移植到Python:http://www.amazon.com/Classic-Data-Structures-Timothy-Budd/dp/0201508893/ref=sr_1_5?ie=UTF8&qid=1375117863&sr=8-5&keywords=Timothy+Budd+C%2B %2B – duffymo

回答

0

這個任務相對簡單。

class Rational(object): 
    __slots__ = ['numerator', 'denominator'] 
    def __init__(self, numerator, denominator=1): 
     # initialize and verify, divide both parameters by GCD of both 

要實現運營商,使用特殊方法名:

def __add__(self, other): 
    # add rational to something else 
def __radd__(self, other): 
    # same, but with operands reversed 
    return self + other 

然後繼續執行__sub____mul__等的完整列表是在Python Data Model: 3.37 Emulating numeric types文檔部分可用。比較運營商被命名爲__lt____le__等,您可以實現以下方式操作:

def __add__(self, other): 
    x_numer = self.numerator 
    x_denom = self.denominator 
    if isinstance(other, Rational): 
     y_numer = other.numerator 
     y_denom = other.denominator 
    elif isinstance(other, int): 
     y_numerator = other 
     y_denominator = 1 
    else: 
     return NotImplemented 
    return Rational(x_numer * y_denom + y_numer * x_denom, x_denom * y_denom) 

有你可能實現,像__repr____str__其他運營商。

我希望這足以讓你開始,其他方法將被編寫成就像上面的__add__一樣。

+0

這真棒,非常感謝! – belmanni

+0

我不知道如何定義__init__部分,任何想法?謝謝! – belmanni

+0

1)檢查參數是否具有正確的類型。 2)用分子和分母的GCD除分子和分母。 3)將結果存儲在對象中。 –