import random
from Words import words
import string
def get_valid_word(words):
word = random.choice(words)
while '-' or ' ' in word:
word = random.choice(words)
return word.upper()
def hangman() -> object:
word = get_valid_word(words)
word_letter = set(word)
alphabet = set(string.ascii_uppercase)
used_letter = set()
while len(word) > 0:
print("You have used these letter", ' '.join(used_letter))
word_list = [letter if letter in used_letter else '-' for letter in word]
print("Current word: ", ' '.join(word_list))
user_letter = input("Guess a letter: ")
if user_letter in alphabet - used_letter:
used_letter.add(user_letter)
if user_letter in word_letter:
word_letter.remove(user_letter)
elif user_letter in used_letter:
print("You have already used this letter: ")
else:
print("Invalid input")
if __name__ == '__main__':
hangman()
我不能帶代碼來執行功能hangman()。終端僅顯示以下輸出:
/Users/nighttwinkle/PycharmProjects/pythonProject/venv/bin/python
/Users/nighttwinkle/PycharmProjects/pythonProject/main.py
uj5u.com熱心網友回復:
問題似乎與線路有關
while '-' or ' ' in word:
您的語法略有偏差,這意味著這將始終評估為True,因此代碼此時進入無限回圈
python將上述解釋為
while ('-') or (' ' in word):
因此,字串-是or陳述句的一半,任何非空字串將始終評估為True
將while條件保留為:
while True or ' ' in words:
試試這個:
while '-' in word or ' ' in word:
uj5u.com熱心網友回復:
您可能在 function 中進入了無限回圈get_valid_word(words)。
嘗試除錯您的代碼并檢查行while '-' or ' ' in word:
uj5u.com熱心網友回復:
另一個答案是正確的。但我不建議改進您的代碼。有一個多余的,因為該行word = random.choice(words)出現了兩次。
當您阻止while回圈并將其替換為遞回呼叫時,您可以防止這種情況發生get_valid_word()。
import random
import string
# from Words import words
words = ['FOOBAR', 'FOO-BAR', 'FOO BAR']
def get_valid_word(words):
word = random.choice(words)
if '-' in word or ' ' in word:
return get_valid_word(words)
return word.upper()
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/494236.html
