2016-07-12 8 views
0

これは私が書いているメインコードのほんの一部です。ユーザーの選択に応じて、プレイヤーの情報を追加し、辞書プレーヤーの名簿から情報を印刷することができます。私は情報を保存してこのフォーマットで印刷したいが、これを行う方法を理解することはできなかった。 氏名**** 電話番号**** ジャージー番号**** 辞書には初めてですが、辞書についての過去数日間の読書と検索に何時間も費やしており、これを行うにはいくつかの異なる方法を試しました失敗しました。私はそれが今セットアップを持っている方法に最も近づいていますが、それはまだ正しく動作しません。私は、私が最初に辞書に間違って情報を格納しているように感じる、どんな助けも大いに評価されるだろう。辞書のキーに値を結び付けて印刷する

player_roster = {} 
def display_roster(self):       #Print Roster 
    if len(player_roster) != 0: 
     for x in player_roster.keys(): 
      print('Name:', x, 'Phone Number:', player_roster[x]) 
    else:           #Print No One on Roster 
     len(player_roster) == [] 
     print('No names have been entered:') 

def add_player(self,):        #Enter Members Name 
    name = input('Enter New Players Name:') 
    phone_number = input('Enter Players Phone Number:') 
    jersey_number = int(input('Enter Players Jersey Number')) 
    player_roster[name] = phone_number, 'Jersey Number', jersey_number 
#If I input Toby as Name 444-444 as Phone Number and 3 as Jersey number it outputs like this 
Name: Toby Phone Number: ('444-4444', 'Jersey Number', 3) 
# I would like it to output like 
           Name: Toby 
           Phone Number: 444-4444 
           Jersey Number: 3 
+0

、追加「\ n」の各キーと値のペアの間 –

答えて

0

あなたはかなりあります。あなたが必要とする(と少しより読みやすいです)として、以下の変更は、あなたが印刷できるようになります。

class PlayerDictionary(): 
    def __init__(self): 
     pass 
    player_roster = {} 
    def display_roster(self):       #Print Roster 
     if len(self.player_roster) != 0: 
      for key, value in self.player_roster.iteritems(): 
       print(str(key) + ": " + str(value)) 
     else:           #Print No One on Roster 
      len(self.player_roster) == [] 
      print('No names have been entered:') 

    def add_player(self,): 
     self.player_roster['Name'] = input('Enter New Players Name:') 
     self.player_roster['Phone Number'] = input('Enter Players Phone Number:') 
     self.player_roster['Jersey Number'] = int(input('Enter Players Jersey Number')) 

if __name__ == "__main__": 
    player = PlayerDictionary() 
    player.add_player() 
    player.display_roster() 

少しより保守ソリューションは、プレーヤーのためのクラスを作成することです。オブジェクトにプロパティを設定し、str関数にオーバーロードします。

class Player(object): 
    def __init__(self): 
     self.__name = "" 
     self.__phone_number = "" 
     self.__jersey_number = "" 

    @property 
    def name(self): 
     return self.__name 

    @property 
    def phone_number(self): 
     return self.__phone_number 

    @property 
    def jersey_number(self): 
     return self.__jersey_number 

    @name.setter 
    def name(self, val): 
     self.__name = val 

    @phone_number.setter 
    def phone_number(self, val): 
     self.__phone_number = val 

    @jersey_number.setter 
    def jersey_number(self, val): 
     self.__jersey_number = val 

    def __str__(self): 
     return ("Name: %s\nPhone Number: %s\nJersey Number: %s" % (str(self.__name), str(self.__phone_number), str(self.__jersey_number))) 

if __name__ == "__main__": 
    player = Player() 
    player.name = input('Enter New Players Name:') 
    player.phone_number = input('Enter Players Phone Number:') 
    player.jersey_number = int(input('Enter Players Jersey Number')) 
    print(player) 
0

私はあなたがこれにprint文を交換することを提案する:

print(" Name: %s \n Phone Number: %s \n Jersey Number: %d") % player_roster[x] 
1

私はあなたのコードに変更するだろうが、見てみるために、あなたが求めて何にこの近くを維持するためにいくつかのものがあります。これは:

def display_roster(): 
    if len(player_roster) != 0: 
     for x in player_roster.keys(): 
      print('Name:', x) 
      print('Phone Number:', player_roster[x][0]) 
      print('Jersey Number:', player_roster[x][1]) 
    else: 
     print('Roster is empty.') 
    return 


player_roster = {} 
def add_player(): 
    name = input('Enter New Players Name:\t') 
    phone_number = input('Enter Players Phone Number:\t') 
    jersey_number = int(input('Enter Players Jersey Number:\t')) 
    player_roster[name] = [phone_number, jersey_number] 
    return 

add_player() 
display_roster() 

# PRINTS: 
#Name: Toby 
#Phone Number: 444-4444 
#Jersey Number: 3 

複数行で印刷すると、結果が得られます。コメントに記載されているように、これは単一のprint()ステートメントでも行うことができますが、私はコンパクトコードがまだあなたに大きな違いをもたらすとは思いません。

さらに、このlen(self.player_roster) == []行は意味をなさない。これは単にTrueを一行に書き込むのと同じくらい良いことです。チームの「空」はelse:によって確認されます。

最後に、私は少しこのようにそれを選手たちが「名簿」の辞書に格納されている方法を変更し、必要があります:あなたの印刷機能で{"Toby": ['444-4444', 3], ...}

関連する問題