2014-12-26 2 views
1

그래서 학교 프로젝트를위한 교수형 집행자 게임을 만들고 있으며, 저의 삶에 대해 생각할 수없는 문제를 발견했습니다. 심지어 이 발생합니다. Python - Tkinter : 내 색인이 범위를 벗어났다는 오류가 발생했습니다.

word_list = ["APPLE", "PEAR", "BANNANA"] 

word = word_list [random.randint(0,2)] 

hidden_word = ["_ " * len(word)] 
print (word) 

코드의이 비트는 다음 문자열 변수로 만들어진 단어 중 하나 목록이며, :

word = word_list [random.randint(0,2)] 

내가 다음으로, 숨겨진 단어는 새 목록을 '_' 그때 (개발) 단어를 인쇄

hidden_word = ["_ " * len(word)] 

print (word) 
: 길이를 얻어서, 숨기는 데 사용

문제가있는 코드로 이동합니다.

def click_1 (key): 
    if str(key) in word: 
     key_1 = word.index(key) 
     print (key_1) 
     hidden_word[key_1] = key 
     print (hidden_word) 
    else: 
     print ("Nope") 
    return letter 

r = c = 0 
for letter in string.ascii_uppercase: 
    Button(letter_frame, text=letter, command=functools.partial(click_1, letter)).grid(row=r, column=c, sticky=W) 
    c += 1 
    if c > 12: 
     c = 0 
     r += 1 

이 있습니다 butons가 와서, 나는 문자로 버튼을 클릭 때 (순간) 다음 단어에, 그리고 경우, 인쇄 확인 :

BANNANA 
>>> 0 
['B'] 

은 if를 단어는 bannana입니다. 나는이 (가) 누를 때 문제는 :

1 

가 온다, 내가 뭔가를 누르면,이 오류가 나타납니다

Exception in Tkinter callback 
Traceback (most recent call last): 
    File "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/idlelib/run.py", line 121, in main 
    seq, request = rpc.request_queue.get(block=True, timeout=0.05) 
    File "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/queue.py", line 175, in get 
    raise Empty 
queue.Empty 

During handling of the above exception, another exception occurred: 

Traceback (most recent call last): 
    File "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/tkinter/__init__.py", line 1475, in __call__ 
    return self.func(*args) 
    File "/Users/alexeacott/Desktop/Hangman.py", line 24, in click_1 
    hidden_word[key_1] = key 
IndexError: list assignment index out of range 

마지막 줄이 가장 intersest이다, Apparantly 히, N이기 때문에 범위를 벗어났습니다. 내 질문은, 왜 이런 일이 벌어지고, 어떻게 해결할 수 있는지입니다.

해피 홀리데이!

답변

3

다음 줄은 하나의 요소 목록을 작성합니다 (elemnt는 "_ _ _ ..."문자열 단어 길이 길이를 가진 문자열) :

hidden_word = ["_ " * len(word)] 

요소를 액세스 (인덱스> 0)는 목록에 하나의 요소 만 있기 때문에 IndexError이됩니다.

여러 요소의 목록을 만들고 싶었 될 수있다

hidden_word = ["_ "] * len(word) 

>>> ["_ " * 3] 
['_ _ _ '] 
>>> ["_ "] * 3 
['_ ', '_ ', '_ '] 
+0

그래서 대괄호를 변경하기 만하면 무엇? 나는 바보였다. 하하, 고마워! 추가 질문이 하나 있습니다. 이제 버튼이 클릭되었을 때 결과가 올바르지 만, 문자의 인스턴스가 여러 개인 경우 해당 인스턴스가 바뀌지 않으므로 문자가 반복되면 끝낼 수 없습니다. 단어! 어디에서 시작해야할지 모르겠다./ – 18166

+0

@ 18166,'list.index'는 첫 번째 항목의 인덱스를 반환합니다. 이를 사용하는 대신 목록 항목을 반복하고 항목이 입력 문자와 일치하는지 확인하고 일치하는 항목에 대해 적절한 작업을 수행하십시오. – falsetru

관련 문제