2013-06-12 3 views
1

저는 보드 게임 Monopoly in Python을 프로그래밍하고 있습니다. 전매권에는 플레이어가 구입할 수있는 3 가지 유형의 토지가 있습니다 (예 : 보드 웍), 철도 및 유틸리티. 부동산에는 6 가지 조건 (0 ~ 4 주택 또는 호텔)에 대한 다양한 구매 가격과 임대료가 있습니다. 철도 및 공공 설비는 소유하고있는 다른 철도 또는 유틸리티의 수에 따라 고정 가격 및 임대료가 있습니다.Python : 변수 이름으로 객체 속성을 참조 하시겠습니까?

나는 그의 키 0-39에서 보드의 토지 소포의 위치입니다 세 가지 사전 속성을 포함하는 게임() 클래스, 모든 있습니다

  • .properties의, 값이 포함 된 목록을 공간의 이름, 구매 가격, 색상 그룹 및 임대료 (튜플);
  • . 공간 이름. 공간 이름으로만 구성됩니다.
  • .utilities 또한 공백 이름 만 포함합니다.

특정 시점에서 플레이어가 해당 사전에 다른 소포 목록을 소유하고 있는지 확인하기 위해 적절한 사전을 반복하기 때문에이 작업을 수행했습니다. 또한 값의 수가 다르므로

Game()에는 space_types라는 튜플이 있습니다. 각 값은 공간 유형 (재산, 철도, 유틸리티, 명품 세금, GO 등)을 나타내는 숫자입니다. space_type 내 플레이어의 종류를 확인하려면에 앉아 :

space_type = space_types[boardposition]

나는 또한 말을해야 인쇄 문을 포함하는 방법 buy_property()와 플레이어() 클래스가 있습니다

"You bought PropertyName for $400."

여기서 PropertyName은 공백 이름입니다.

dictname = "dictionary to pull from" # based on space_type 
    PropertyName = Game.dictname # except .dictname would be "dictionary to pull from" 

그것이 가능 : 내가하고 싶은 무엇

space_type = Game(space_types[board_position]) 
    if space_type is "property": 
     # pull PropertyName from Game.properties 
    elif space_type is "railroad": 
     # pull PropertyName from Game.railroads 
    elif space_type is "utility": 
     # pull PropertyName from Game.utilities 
    else: 
     # error, something weird has happened 

이 같은 것입니다 :하지만 지금 나는 추한 것 같다 그래서 같은 경우/ELIF/다른 블록을 사용해야합니다 Python에서 변수의 값을 참조 할 속성의 이름으로 전달 하시겠습니까? 나는 근본적으로 잘못되어 가고 있다고 말하면서 그것에 대해 더 좋은 방법을 제안하고있는 누군가에게 감사 할 것이다. 어떻게 사전의 사전 대해

property_name = getattr(Game, dictname) 
+0

"파이썬은 참조 할 속성의 이름으로 변수의 값을 전달하는 데에 수 있습니까?" 다른 사전 레이어를 사용하지 않겠습니까? – Patashu

+0

"apple"은 "apple"을 사용하는 것이 문자열이 동일한 개체로 보장되지 않기 때문에 반드시 성공하지 않을 수도 있습니다. ('is'는 객체 동일성 (object identity)에 의해 비교된다. (똑같이 * 같은 객체라면), '=='는 동등 함을 비교한다.) –

답변

1

당신은 getattr 기능을 사용할 수 있습니까?

D= {"property": Game.properties, "railroad": Game.railroads, "utility": Game.utilities} 
space_type = Game(space_types[board_position]) 
dictname = D[space_type] 
+0

미친 논리, 간단한 대답. 그게 내가 필요한 것 같아. 문서를 철저히 읽어야합니다! –

2

:

+0

다른 새로운 것을 배웠습니다. 나는 처음부터 그 일을 했어야했고, 나중에 나의 사전을 재 구조화 할 수있다. 고맙습니다! –

관련 문제