저는 보드 게임 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)
"파이썬은 참조 할 속성의 이름으로 변수의 값을 전달하는 데에 수 있습니까?" 다른 사전 레이어를 사용하지 않겠습니까? – Patashu
"apple"은 "apple"을 사용하는 것이 문자열이 동일한 개체로 보장되지 않기 때문에 반드시 성공하지 않을 수도 있습니다. ('is'는 객체 동일성 (object identity)에 의해 비교된다. (똑같이 * 같은 객체라면), '=='는 동등 함을 비교한다.) –