2017-12-21 18 views
-1

プログラムのアイデアは"言語 "を取り、数値に変換することです。 10 P 20 T = 40 V = 10より小さい80 何が正常な数で表現される言語は非常に簡単構築さ"'int'オブジェクトには属性 'getal'がありません。自己作成クラスPyhton

Kは= =

今番号はいけません私はこれを説明するので、私がここで達成しようとするものを得るのは簡単です。

私は以下のように見える "Mangarevaans" と呼ばれるクラスを構築:私はdoctestの

""" 
    >>>612 // Mangarevaans(26) 
    Mangarevaans('P3') 
    """ 

を実行したいとき

def mag2arab(getal): #this function is designed to turn the letters into the normal numbers we're used to 
mag = str(getal) 
waarde = {"K": 10, "P": 20, "T": 40, "V": 80} 
arab = 0 

for index, j in enumerate(mag): 
    if index == 0 and j.isnumeric(): 

     if len(getal) == 1: 
      x = 0 
     else: 
      x = 1 

     arab += int(j) * waarde[mag[x]] 
    elif j.isnumeric(): 
     arab += int(j) 
    elif not (str(mag[0]).isnumeric() and index == 1): 
     arab += waarde[j] 
return arab 

class Mangarevaans(): 
    """ 
    >>>612 // Mangarevaans(26) 
    Mangarevaans('P3') 
    """ 

    def __init__(self, getal): 

     if isinstance(getal, int): 
      assert 1 <= getal < 799, 'ongeldige waarde' #this is one of the rules of the language that if there is a number it should be between these values 
      self.getal = getal 


     else: 
      for letter in getal: 
       if isinstance(getal, str): 
        for letter in getal: 
         if letter in "VTPK": 
          self.getal = getal 
       else: 
        raise AssertionError('ongeldige waarde') 
      self.getal = mag2arab(getal) 

    def __int__(self): 
     return self.getal 

    def __str__(self): 
     return arab2mag(self.getal) 

    def __repr__(self): 
     return f"Mangarevaans('{str(arab2mag(self.getal))}')" 

    def __rfloordiv__(other, self): 
     return Mangarevaans(other // self.getal) #The problem occurs here 

は今、私は

を言ってエラーが出ます

'int'オブジェクトには属性 'getal'がありません

が、私は文字列に私の自己を変更した場合、私は、属性「getalは」「STRに属している場合

「strの」オブジェクトは、私が定義することができますどのように何の属性「getal」

を持っていません取得"または" int "?

誰でも手伝ってもらえますか?

どうもありがとうすでに

答えて

1

selfは常に偶数r*(右)メソッドの最初の引数、です。だから、書く:確かにトリックを行い

def __rfloordiv__(other, self): 
    return Mangarevaans(other // self.getal) 
+0

:代わりの

def __rfloordiv__(self, other): return Mangarevaans(other // self.getal) 

を。ありがとうございました –

+0

それは助けてよかった。ところで、あなたは[upvote](http://stackoverflow.com/help/privileges/vote-up)の特権を持っています。 ;) –

+0

私は十分に「経験」がなかったので、以前はうまくいきませんでした:D –

関連する問題