2013-06-19 4 views
0

지금은 파이썬을위한 온라인 과정을 밟고 있습니다. 약 1/3 만 진행되었고 지금까지 배운 것들로 무언가를 만들려고 노력했습니다. 지금 오류로 실행. 나는 집에서 텍스트 기반 모험 게임을 만들고있다. 모든 방은 별도의 기능입니다. EX : 난 당신이 입력 횃불을 필요로 한 방을 가지고 있지만파이썬, 함수를 찾을 수 없습니다

def hallway(): 
hallway_direction = raw_input('blahblah') 
if hallway_direction == 'n': 
    living_room() 

. 여기 방의 값을 유지하기 위해 사전을 사용했습니다. 다른 방에서

global rooms 

rooms = {} 
rooms['first_room'] = {'note' : False} 
rooms['old_door'] = {'boots' : False} 
rooms['first_again'] = {'torch' : False} 
rooms['first_again'] = {'seen' : False} 

는 사실에 횃불을 설정하지만 제가하는 데 문제는 당신은 내가 필요로하는 횃불이없는 경우는 홀

def fancy_door(): 
    raw_input('You open the door, the inside is pitch black. You need a source of light before you can enter.') 
    if rooms['first_again']['torch']: 
     raw_input('You light the torch and step inside, the room is bare, only a table with a ring in the center.') 
     choice5_r = raw_input('Do you take the ring? Y/N ("back" to leave)') 
     choice5_r = choice5_r.lower() 
     if choice5_r == 'y': 
      raw_input('Some text here') 
      darkness() 
     elif choice5_r == 'n': 
      raw_input('You leave the ring as it is.') 
      fancy_door() 
     elif choice5_r == 'back': 
      hall() 
     else: 
      raw_input('Not a valid option') 
      fancy_door() 
    else: 
     hall() 

에 다시 당신을 데려 갈 것입니다 그러나 이것을 실행하면 다음과 같은 오류가 발생합니다.

Traceback (most recent call last): 
File "<stdin>", line 247, in <module> 
File "<stdin>", line 23, in first_room 
File "<stdin>", line 57, in hall 
File "<stdin>", line 136, in fancy_door 
KeyError: 'torch' 

온라인 247 번에서는이 시점까지 작동하는 first_room()을 호출합니다. 23은이 지점까지 작동하는 hall()을 호출합니다. 57은 fancy_door()를 호출하여 작동해야합니다. 다른 문 함수와 동일하게 보이며 제대로 작동합니다. line 136은 위의 줄입니다. "[first_again '] ['torch '] :"

여기에 문제가 없으면 여기에 코드 전체를 게시 할 수 있습니다. 230 행 이었기 때문에.

누군가 나를 도울 수 있다면 아주 좋을 것입니다.

또한 나쁜 코드를 용서해주십시오. 아마도 적절한 규칙을 따르지 않을 것이지만 제가 말했던 것처럼 저는 Python을 처음 사용하고 프로그래밍에 익숙합니다. 이것이 내가 작성한 첫 번째 것입니다. 미리 감사드립니다.

답변

1

전역 변수 정의에서 [[first_again]]을 두 번 정의합니다.

때마다 당신이 딕셔너리의 요소에 값을 할당합니다

rooms['first_again'] = #something 

이전에이 무슨 덮어 씁니다. 그 객체가 더 이상 토치라는 요소를 가지고 있기 때문에

KeyError: 'torch' 

말을하지입니다.

가로 변경합니다 :

rooms['first_again'] = {'torch' : False, 'seen' : False} 

아니면 나중에 해당 요소에 값을 추가해야하는 경우, 당신은 할 수 있습니다 : 당신은 두 번 rooms['first_again']을 할당 한

rooms['first_again'] = {'torch' : False} 
rooms['first_again']['seen'] = False 
+0

어제 dict 기능에 대해 알게되었습니다. 덕분에 도움을! – user2495853

+0

문제 없습니다. 또한 사전 객체에 대한 파이썬 튜토리얼 링크가 도움이 될 수 있습니다. http://www.tutorialsp.com/.com/python/python_dictionary.htm – xgord

0

.

rooms['first_again'] = {'torch' : False} 
rooms['first_again'] = {'seen' : False} 

는 아마되어야합니다 :

rooms['first_aggin'] = {} 
rooms['first_again']['torch'] = False 
rooms['first_again']['seen'] = False 
+0

아, 정말 고마워.이게 나를 미치게 만들었다. – user2495853

0

여기에 단서 KeyError: 'torch'입니다.이 오류는 존재하지 않는 사전 내의 키에 액세스하려고 시도 할 때 발생합니다.

rooms['first_again'] 처리 방법에 문제가있는 것처럼 보입니다. 다음과 같은 코드를 보여

rooms['first_again'] = {'torch' : False} 
rooms['first_again'] = {'seen' : False} 

rooms'first_again' 중 하나는 여러 개의 키를 가지고있는 사전이다. rooms['first_again']을 참조하면이 키에 해당하는 개체를 검색합니다. 실제로 여기에서 한 것은 다른 사전을 중첩하는 것입니다.

첫 번째 할당은 {'torch' : False}부터 rooms['first_again']까지 사전을 할당합니다. 두 번째 할당은 매우 유사한 작업을 수행하지만 첫 번째 할당을 덮어 씁니다. 토치에 대한 값을 포함하는 개체가 더 이상 존재하지 않습니다!

같은 키에서 여러 값을 사용할 수있게하려면이 값을 하나의 사전에 넣습니다.

rooms['first_again'] = { 'torch' : False, 'seen' : False } 

이제 원본 코드에서 시도한 값을 정확하게 참조 할 수 있습니다.