2017-09-30 15 views
0

내가 텍스트 어드벤처 게임을 만드는거야 통해 루프와 경우 문파이썬, 대신의 많은 개체를 검사 할 때 어떻게 전체 목록

예를 들어

- 만약 목록 및 위치 = 방 다음 인쇄 설명,

단어

나는 목록을 통해 반복하고 아래의 If 문 하나만 가질 것이라고 생각했습니다.

위치가 1 인 경우 문이나 매트를 입력하고 설명을 얻을 수 있습니다. 위치가 2 인 경우 두 번째 문 설명이 나타나지 않습니다.

코드를 전체 목록을 반복하고 위치 2의 문 설명을 인쇄하려면 어떻게해야합니까? 당신의 도움을 주셔서 감사합니다.

list_of_objects =[ 
    "door","A sturdy door that is firmly locked.",1, 
    "door","A test door. Why do I never appear?",2, 
    "mat","Its one of those brown bristly door mats.",1] 
location = 1 
word = "" 

def print_description(): 
    for x in list_of_objects: 
     if x == word and location == list_of_objects[list_of_objects.index(word)+2]: 
      print(list_of_objects[list_of_objects.index(word)+1]) 
      return 
    print("Sorry, what was that ? ") 

while word != "x": 
    word = input("Type door or mat ") 
    print_description() 
+0

사전을 찾고 있습니다. – hjpotter92

+0

사전 목록으로 만드십시오. – Barmar

+0

if 문'list_of_objects [list_of_objects.index (word) +2]'의 두 번째 부분이 항상 문에 대해 1이기 때문에 user4815162342의 대답에 설명 된대로 사전이나 튜플을 사용하십시오. 'index (word)'는'word'의 첫 번째 모습만을 고려합니다.이 경우 첫 번째 색인입니다. 인쇄물을 추가하거나 코드를 디버그하여이를 확인할 수 있습니다. – SBylemans

답변

1

개체 속성의 플랫 목록을 차례대로 만드는 대신 각 목록 구성원이 개체를 완전히 설명하도록해야합니다. 예를 들어, 튜플과 목록을 채울 수 있습니다 :

list_of_objects = [ 
    ("door", "A sturdy door that is firmly locked.", 1), 
    ("door", "A test door. Why do I never appear?", 2), 
    ("mat", "Its one of those brown bristly door mats.", 1) 
] 

는 그런 다음 사용하여 검사 할 수 있습니다 :

def print_description(user_word, user_location): 
    for object_type, description, location in list_of_objects: 
     if object_type == user_word and location == user_location: 
      print(description) 

또 다른 옵션은 목록의 구성원으로 dicts 대신 튜플을 사용하는 것입니다. 이것은 처음에는 좀 더 타이핑하는 것이지만 나중에 선택적 특성을 포함 할뿐만 아니라 더 많은 특성을 나중에 더 쉽게 추가 할 수 있습니다.

dict_of_objects = { 
    ("door", 1): "A sturdy door that is firmly locked.", 
    ("door", 2): "A test door. Why do I never appear?", 
    ("mat", 1): "Its one of those brown bristly door mats." 
} 

그럼 당신이 필요로하는 모든은 다음과 같습니다 :

def print_description(): 
    key = word, location 
    if key in dict_of_objects: 
     print(dict_of_objects[key]) 
    else: 
     print("Sorry, what was that ? ") 

list_of_objects = [ 
    { "type": "door", 
     "description": "A sturdy door that is firmly locked.", 
     "location": 1 }, 
    ... 
] 
+1

사전 목록이 더 좋을 것입니다. IMHO. – Barmar

+0

@Barmar 일반적으로 동의하지만 매우 짧은 개별 항목의 경우 튜플은 작성하기가 짧고 쉽게 풀 수 있습니다. 여기에 나와있는 것처럼 트리플은 아마도 여전히 합리적 일지 모르지만, 그 이상으로는 딕트 (dict)로 갈 것입니다. – user4815162342

+0

dicts를 사용하면 나중에 코드를 쉽게 확장 할 수 있습니다. – Barmar

0

이 작업을 수행하는 가장 좋은 방법은 그 키 워드, 위치 쌍 (튜플)되는 딕셔너리를 사용하는 것입니다 방법은 반복 할 필요가 없습니다.

+0

감사합니다. Tom, 귀하의 옵션이 훌륭하게 작동합니다. –