2016-04-30 5 views
0

クラスの__str__メソッドを使用してリストを印刷しようとしましたが、リストを印刷できるようになるには、そのクラスの__str__メソッドの前にある別のメソッドでアルファベット順に並べる必要があります。このために提供される方法は、次のとおり名前が必要クラスメソッドを使用したリストのアルファベット順

def returnName(self): 
    '''return the name of the player first last''' 

    return(self.first + self.last) 

def returnReverseName(self): 
    '''return the name of the player as last, first''' 
    reverseName = (str(self.last), str(self.first)) 
    return(reverseName) 

def __eq__ (self, other): 
    '''determine if this persons name is the same as the other personsname''' 

    if self.returnReverseName == other.returnReverseName: 
     return True 
    else: 
     return False 


def __lt__(self,other): 
    '''determine if this persons name is less than the other persons name alphabetically''' 

    if str(self.returnReverseName) < str(other.returnReverseName): 
     return True 
    else: 
     return False 

def __gt__ (self, other): 
    '''determine if this persons name is greater than the other persons name alphabetically''' 

    if self.returnReverseName > other.returnReverseName: 
     return True 
    else: 
     return False 

def __str__(self): 
    '''return a string of the persons name and their rating in a nice format''' 

    Name1 = str(self.first) + ' ' + str(self.last) 
    return ('%-20s %10.2f' % (Name1, self.rating)) 

はラストネーム、ファーストネームでソートしかし名姓の順に印刷します。方法__lt____gt__は、印刷時に注文するべきものです。

basicList.sort() 
for line in playerDict: 
    print(playerDict[line]) 

が、これはリストを利用していない、とだけ順不同的にラインで辞書の行を印刷している:私はこれまでのリストをコンパイルする必要があるコードがあります。メソッドを参照していますが、名前をアルファベット順に並べることはできません。適切な順序で辞書を印刷する方法を適切に使用するにはどうすればよいですか?プレイヤーオブジェクトのリストを使用する必要がある場合は、アルファベット順の後に印刷される__str__メソッドを使用して印刷するにはどうすればよいですか?

答えて

1

このコードには多くの間違いや不思議がありますが、実際に間違った結果を招く可能性があるのは、__eq____gt__が2つの名前ではなく2つの名前を比較していることです。 __lt__は何らかの理由でこれらの2つの関数の文字列表現を比較します。私は他の関数とは異なる動作をしている理由は分かりませんが、それはまだ間違っています(ちょっと違う)。

ソートされたリストが使用されていないのは驚きではありません。使用しないでください。

basicList.sort() # sort the list 
for line in playerDict: # that's not basicList 
    print(playerDict[line]) # still no basicList 

あなたのクラスメソッドは、修理した場合、次のようになります。

def returnName(self): 
    '''return the name of the player first last''' 
    return(self.first + ' ' + self.last) 

def returnReverseName(self): 
    '''return the name of the player as last, first''' 
    return self.last, self.first 

def __eq__ (self, other): 
    '''determine if this persons name is the same as the other personsname''' 
    return self.returnReverseName() == other.returnReverseName() 

def __lt__(self,other): 
    '''determine if this persons name is less than the other persons name alphabetically''' 
    return self.returnReverseName() < other.returnReverseName() 

def __gt__ (self, other): 
    '''determine if this persons name is greater than the other persons name alphabetically''' 
    return self.returnReverseName() > other.returnReverseName() 

def __str__(self): 
    '''return a string of the persons name and their rating in a nice format''' 
    return '%-20s %10.2f' % (self.returnName(), self.rating) 

しかし、あなたはおそらく、任意の必要はありません。それはPlayerオブジェクト(私はそれがクラス名であると仮定します)である値に付けられた何らかの種類の鍵を保持する辞書ですplayerDictのように見えます。ただ、それらの値を反復して与えられたソートキーを使用します。

for entry in sorted(playerDict.values(), key=lambda x: x.last, x.first): 
    print(entry) 
+0

を残念ながら、私は辞書のソートのための方法を利用する必要があるので、私はそのはるかに簡単にルートを行っていない理由です。私が受け取った別のアドバイスでは、リストを作成し、そのリストをソートし、__str__メソッドを使ってリストの情報を出力するよう指示されました。私はリストの正しい順序を認識するためにltとgtメソッドを取得する方法はあまりよく分かりません。 – huskies1313

+0

これらのメソッドを実装したい場合は、示されているようにして、単純に 'key = ... '引数を' sorted() '呼び出しから削除します。 – TigerhawkT3

+0

それは働いて、ありがとう! – huskies1313

関連する問題