[英]How to create a python hangman game using asterisks
我迷失在這個編程任務上。 我應該制作一個劊子手游戲,從文本文件中隨機生成一個單詞(使用 FileIO),並提示用戶一次猜測一個字母,單詞中的每個字母都顯示為星號。 當用戶做出正確的猜測時,就會顯示實際的字母。 然后當用戶完成一個單詞時,它會顯示未命中的數量,並詢問用戶是否繼續玩另一個單詞。
這就是我到目前為止所擁有的。 我不知道下一步該做什么。 請幫忙!
import random
hiddenWordList = []
words = []
def pick_word(infile):
with open(infile) as f:
contents_of_file = f.read()
lines = contents_of_file.splitlines()
line_number = random.randrange(0, len(lines))
return lines[line_number]
def words():
return(pick_word("vocab.txt"))
這是可能有用的東西的骨架。
def show_word(word, guessed_letters):
guessed_letters = set(map(str.casefold, guessed_letters))
# this is required for this minimal example, but will be a performance hit
# better to do this when you insert the new guess into "guessed_letters"
sanitized_word = ''.join([ch if ch.casefold() in guessed_letters else '*' for ch in word])
print(sanitized_word)
你可以把它寫得更迫切:
from typing import Set
def show_word_explained(word: str, guessed_letters: Set[str]):
# assume for this example that we've already casefolded all the letters in
# guessed_letters.
result = ''
for letter in word:
if letter.casefold() in guessed_letters:
result += letter
else:
result += '*'
print(result)
不過,對於有經驗的 Python 程序員來說,這性能較差且難以閱讀。
您還可以通過不每次將整個文件讀入 memory 來改進您的pick_word
function。 要么通讀一遍並將其保存在 memory 中以運行您的應用程序(這會花費更多內存),要么根本不將其保存在 memory 中並讀取文件兩次——一次獲取長度,然后再次選擇文件想要(這需要更多時間)
import random
from functools import lru_cache
@lru_cache(maxsize=1)
def word_list_store_in_memory(infile):
"""
Reads a file into memory, storing it in an least recently used cache
"""
with open(infile) as f:
return [word.strip() for word in f.readlines()]
def get_single_word_from_memory(infile):
word_list = word_list_store_in_memory(infile)
return random.choice(word_list)
def get_single_word_from_disk(infile):
with open(infile) as f:
num_words = len(f)
needle = random.randrange(num_words)
with open(infile) as f:
# skip the lines before the selected word
for _ in range(needle):
next(f)
# return the next one
return next(f)
一旦你選擇了一個隨機詞(你似乎有一個句柄),你應該在一個單獨的 function 中完成游戲,它返回用戶找到該詞后的失敗嘗試次數。 然后創建一個調用 function 的 while 循環會更容易,打印結果並要求用另一個詞繼續:
示例游戲 function:
def hang(word):
tried = set()
while not tried.issuperset(word):
print("".join(f"*{c}"[c in tried] for c in word))
c = input("Enter a letter : ")
if c in tried or len(c)!=1 or c<"a" or c>"z":
print("invalid letter")
continue
if c not in word: print(f"Letter '{c}' not in word")
tried.add(c)
return len(tried.difference(word))
主循環示例:
more = "y"
while more == "y":
word = pickRandomWord()
missCount = hang(word)
print(f"{missCount} missed attempts")
more = input("Try another word ? (y/n) ")
樣品運行:
********
Enter a letter : e
e*e*****
Enter a letter : l
ele*****
Enter a letter : p
elep****
Enter a letter : r
Letter 'r' not in word
elep****
Enter a letter : m
Letter 'm' not in word
elep****
Enter a letter : n
elep**n*
Enter a letter : t
elep**nt
Enter a letter : a
elep*ant
Enter a letter : h
2 missed attempts
Try another word ? (y/n) n
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.