我正在創建一個 hangman 游戲,我正在顯示尚未被猜到的字母,因此如果沒有猜到任何字母,它會顯示所有 abc。而我想弄清楚的是如何擺脫用戶從剩余字母中輸入的字母并回傳剩余字母的字串。
def get_available_letters(letters_guessed):
"""
Returns a string of letters that have not yet been guessed.
:param: letters_guessed: letters that have been guessed so far by the player
:type letters_guessed: str
:return: letters that have not been guessed
:rtype: str
"""
ALL_LETTERS = 'abcdefghijklmnopqrstuvwxyz'
letters_guessed = letters_guessed.lower()
for ch in ALL_LETTERS:
if ch in letters_guessed:
letters_left = ALL_LETTERS.replace(letters_guessed, '')
return letters_left
else:
return ALL_LETTERS
uj5u.com熱心網友回復:
您可以letters_guessed從中減去ALL_LETTERS,可用的字母仍然存在。
letters_guessed此函式通過將in替換ALL_LETTERS為空來回傳減去的字母。所以剩下的就是剩余的可用字母。
def get_available_letters(letters_guessed):
ALL_LETTERS = 'abcdefghijklmnopqrstuvwxyz'
return ALL_LETTERS.replace(letters_guessed.lower(), '')
例子:
letters_guessed = "abc"
ALL_LETTERS.replace(letters_guessed, '')
# abc will be removed from abcdefghijklmnopqrstuvwxyz
# -> defghijklmnopqrstuwxyz
但是,也有一些邊緣情況。
letters_guessed未排序,因為replace替換了確切的子字串。- 有些字母不包含在 ALL_LETTERS 中,原因相同。
這可以通過letters_guessed一個一個地回圈字母然后從中洗掉來解決ALL_LETTERS
def get_available_letters(letters_guessed):
ALL_LETTERS = 'abcdefghijklmnopqrstuvwxyz'
for letter in letters_guessed.lower():
ALL_LETTERS = ALL_LETTERS.replace(letter, '')
return ALL_LETTERS
- 您可以重構代碼,使其
available_letters成為函式外部的變數(全域變數或類的屬性)
available_letters = 'abcdefghijklmnopqrstuvwxyz'
當猜到一個字母時,只需從中洗掉一個字母available_letters
uj5u.com熱心網友回復:
您不需要 for 回圈中的 else,因為一旦 ach不在letters_guessed您回傳完整串列。改為這樣做:
def get_available_letters(letters_guessed):
"""
Returns a string of letters that have not yet been guessed.
:param: letters_guessed: letters that have been guessed so far by the player
:type letters_guessed: str
:return: letters that have not been guessed
:rtype: str
"""
ALL_LETTERS = 'abcdefghijklmnopqrstuvwxyz'
letters_guessed = letters_guessed.lower()
for ch in ALL_LETTERS:
if ch in letters_guessed:
letters_left = ALL_LETTERS.replace(letters_guessed, '')
return letters_left
return ALL_LETTERS
uj5u.com熱心網友回復:
此函式回傳一個字串,abc其中包含不在letters_guessed.
def get_available_letters(letters_guessed):
abc = "abcdefghijklmnopqrstuvwxyz"
for ch in abc:
if ch in letters_guessed.lower():
abc = abc.replace(ch, "")
return abc
順便說一句,我建議在這種情況下使用串列而不是字串。
如果使用串列,這個函式可以這樣寫:
def get_available_letters(letters_guessed):
abc = "abcdefghijklmnopqrstuvwxyz"
return [ch for ch in abc if ch not in letters_guessed.lower()]
uj5u.com熱心網友回復:
我認為最好將可用字母存盤為串列并在玩家猜測時從中彈出值。看看這個實作。
from string import ascii_lowercase
ALL_LETTERS = list(ascii_lowercase)
LETTERS_LEFT = ALL_LETTERS
def guess():
letter = str(input("Enter letter: ")).lower()
if letter in LETTERS_LEFT:
LETTERS_LEFT.pop(LETTERS_LEFT.index(letter)) # Remove letter from list
elif letter in ALL_LETTERS:
print("This letter was already used!")
else:
print("Wrong input! Use one of:", "".join(ALL_LETTERS))
return get_available_letters()
def get_available_letters():
return LETTERS_LEFT
while True:
print(guess())
實際上我認為你應該在一個類中使用所有這些東西,因為 OOP 更適合游戲開發(恕我直言)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/533917.html
