2017-05-31 74 views
0

編輯:已解決。謝謝bruno desthuilliers!

我正在爲一個學校作業做一個Hang子手遊戲,而且我遇到了一個錯誤。我的程序無法正確識別何時進行了正確的猜測,而是會說每個猜測都不正確。Hang子手代碼不會檢測到正確的猜測

我會分解我的程序的主循環。前後的所有代碼都是按照預期工作的介紹性和結論性對話。問題在於猜測這個詞。

我的代碼的這部分工作正常 - 這是處理不同類型的無效輸入。

while "_" in placeholder: 
    guess = input("Guess a letter: ").lower() 
    if not guess.isalpha(): 
     print("Please enter a letter.") 
    elif not len(guess) == 1: 
     print("Please enter one letter only.") 
    elif guess in previous_guesses: 
     print("You have already guessed that letter. Please guess a letter") 

這是有問題的部分。這是程序檢查被猜測的字母是否在單詞中的地方。 word_letters只是一個單詞中的字母列表 - 由word組成.split()

elif guess in word_letters: 
    print("'" + guess + "'" + " is in the word. Good guess!") 
    previous_guesses.append(guess) 
    index = word_letters.index(guess) 
    for index, letter in enumerate(word_letters): 
     if letter == guess: 
      placeholder[index] = guess 

再次,這部分在這裏工作正常。只有在猜測錯誤時纔會發生,但即使猜測是正確的,也會發生。

else: 
    print("'" + guess + "'" + " is not in the word. Try again.") 
    previous_guesses.append(guess) 
    stage += 1 
    Hangman.draw(stage) 

我真的不明白爲什麼這樣不能正常工作。我創建了一個測試模塊,它可以準確模擬我的主程序中發生了什麼,並且它可以正常工作。

placeholder = ['_', '_', '_', '_', '_'] 
word_letters = ['h', 'e', 'l', 'l', 'o'] 
guess = input("guess ") 
if guess in word_letters: 
    print("It works") 
    index = word_letters.index(guess) 
    for index, letter in enumerate(word_letters): 
    if letter == guess: 
     placeholder[index] = guess 
    print(placeholder)  
else: 
    print("It didn't work") 

任何人都可以向我解釋什麼是我的主程序的問題是什麼?

+0

要注意的是for循環也有其他陣營運行時我認爲當for循環失敗或從未運行。 –

+0

我不知道什麼是錯的。你的代碼工作正常。如果您打印佔位符,它的作用與您的測試相同?您能否提供更多信息錯誤的測試結果? – Stef2i

回答

0

「word_letters是一個簡單的單詞中的字母列表 - 通過word.split形成()」

然後不要再觀望 - word_letters是不是你想的是:

>>> word = "hello" 
>>> word_letters = word.split() 
>>> word_letters 
['hello'] 
>>> "h" in word_letters 
False 

str.split(sep=None)實際上將在sep分割字符串,默認爲任何「空白」字符:

>>> "hello word".split() 
['hello', 'word'] 
>>> "hello\nword".split() 
['hello', 'word'] 
>>> "hello\tword".split() 
['hello', 'word'] 

要的字符串的字符list,你不得不使用list(yourstring),即:

>>> word_letters = list(word) 
>>> word_letters 
['h', 'e', 'l', 'l', 'o'] 
>>> "h" in word_letters 
True 

但這甚至沒有必要在這裏,因爲字符串都是序列,支持遏制測試已經:

>>> word 
'hello' 
>>> 'h' in word 
True 

index方法太:

>>> "hello".index("h") 
0 
>>> "hello".index("o") 
4 
+0

謝謝,這工作! word_letters的存在僅僅是因爲我不確定enumerate()在將參數傳遞給字符串時的行爲。 – James

+0

@James the Python shell是一個非常方便的工具來測試東西 - 比如「enumerate()在傳遞字符串時的行爲方式」;) –

+0

ps:如果它解決了您的問題,那麼您可以隨時接受答案) –

相關問題