2016-07-12 2 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(" 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], ...}

관련 문제