2017-12-05 1 views
0

클래스 프로젝트의 경우 행맨 게임을 만들어야합니다. 그것의 지침에 따라이 코드를 입수했습니다 :함수 매개 변수가 범위를 벗어났습니다.

def hangman(guessed, secret): 
    word = "" 
    wrongLetters = 0 
    checkLetter = 0 
    compareLetter = 0 
    for i in range(len(secret)): 
     if secret[checkLetter] == guessed[compareLetter]: 
      word += guessed[compareLetter] 
      compareLetter = 0 
      checkLetter += 1 
     elif secret[checkLetter] != guessed[compareLetter]: 
      compareLetter += 1 
      for i in range(len(secret) - 1): 
       if secret[checkLetter] == guessed[compareLetter]: 
        word += guessed[checkLetter] 
        break 
       elif secret[checkLetter] != guessed[compareLetter]: 
        compareLetter += 1 
        wrongLetters += 1 
       elif wrongLetters == len(secret): 
        word += "-" 
        wrongLetters = 0 
        checkLetter += 1 
        compareLetter = 0 
    print(word) 

내 문제는 두 번째 for 문에서 if secret[checkLetter] == guessed[compareLetter]: 문자열 색인의 범위를 벗어 하더군요 것입니다. 내 함수 매개 변수가 로컬이기 때문에 그것이라고 생각합니다. 어떤 생각을 고치는 방법?

+0

어떻게 함수에 인수로'secret'을 전달합니까? – mtkilic

답변

0

변수의 값이 compareLetter 일 때 길이가 guessed을 초과하면 오류가 발생한다는 사실을 다양한 입력으로 코드를 실행 해 보았습니다. 로직에 문제가있는 것 같습니다!

0 1 
1 1 
1 2 
1 3 
1 4 
1 6 

당신이 문제를 이해 희망 :

나는 여기 checkLettercompareLetter의 값을 변경하는 방법입니다 hangman('banana', 'apple') 로했습니다.

0

내가 처음 보는 것보다 더 많은 문제가있을 수 있지만 여기에 있습니다.

1) 두 번째 for 루프에서는 절대로 마지막 elif 경우에 도달하지 않습니다.

2) 추측 된 문자 목록 끝에 도달하면 compareLetter를 재설정하지 않습니다. 즉, 결과적으로 예외를 유발하는 '추측 된'길이보다 커질 수 있습니다.

3) for 루프 반복자를 모두 i라는 이름으로 지정했습니다. 그리고 당신은 그 (것)들을 이제까지 이용하지 않는다.

4) for 루프는 비밀의 길이를 두 번 중첩합니다. 그리고 반복자를 사용하지 마십시오.

eiram_mahera가 지적했듯이 코드 논리에는 결함이 있습니다. 당신이 각각의 루프를하고있는 것을보고, 각각의 루프를하고 싶은 것을 비교하십시오. 그것들은 같은 것이 아닙니다.

관련 문제