我正在尝试创建一个子手游戏。根据选择的随机单词的长度,我的程序突然停止。仅当您猜出单词或达到最大猜想次数时,它才会停止。
#Krish Patel
from random import randrange
def load_words():
word_list = ["mom"] #"apple","tomato","krish","name","pediatrician"]
return word_list
words_dict = load_words()
def get_word():
word=words_dict[randrange(0,len(words_dict))]
return word
secret_word = get_word()
letters_guessed = set()
local_guesses= 0
max_guesses = 6
num_correct_letters = 0
def play_hangman():
global secret_word
global letters_guessed
global max_guesses
global num_correct_letters
global local_guesses
print("Hello there! You are about to play a game of hangman!. Enjoy...")
while not word_guessed() and num_correct_letters != len(set(secret_word)) and local_guesses < max_guesses:
guess = input("Enter a letter: ")
if letters_guessed.add(guess) != letters_guessed:
local_guesses += 1
letters_guessed.add(guess)
else:
print("You already guessed that letter!")
print_guessed()
word_guessed()
if word_guessed() == True:
print("You have won! The secret word was: " + secret_word)
secret_word = get_word()
letters_guessed = set()
local_guesses= 0
max_guesses = 6
num_correct_letters = 0
if local_guesses >= max_guesses:
print("You went over your maximum number of allotted guesses. The secret word was: " + secret_word)
secret_word = get_word()
letters_guessed = set()
local_guesses= 0
max_guesses = 6
num_correct_letters = 0
def print_guessed():
global secret_word
global letters_guessed
print("Your guesses are " + str(letters_guessed))
def word_guessed():
global secret_word
global letters_guessed
global num_correct_letters
for i in set(secret_word):
if i in letters_guessed:
num_correct_letters += 1
return num_correct_letters == len(set(secret_word))
应该发生的是,您有6个猜测来弄清楚这个单词是mom,但是该程序在两次尝试后就结束了。
答案 0 :(得分:0)
致电word_guessed
时,在计算正确字母的数量之前,请勿将num_correct_letters
重置回0
。因此,一旦您猜出一个正确的字母,即使您猜错了其他字母,该计数器也会不断增加。如果到达len(set(secret_word))
,则循环结束。
在num_correct_letters
状态下,无需检查while
,因为word_guessed()
已经检查过了。
您不需要word_guessed
中的循环,也不需要变量num_correct_letters
,只需编写以下内容即可:
def word_guessed():
global secret_word
global letters_guessed
return set(secret_word).issubset(letters_guessed)
您还没有测试guess
中是否已正确插入letters_guessed
。使用guess not in letters_guessed
。
您应该在函数开始时一次初始化所有变量,而不要在最后两个if
语句中都重复一次。而且不需要它们是全局变量,只需将它们作为函数参数传递即可。
from random import randrange
def load_words():
word_list = ["mom","apple","tomato","krish","name","pediatrician"]
return word_list
words_dict = load_words()
def get_word():
word=words_dict[randrange(0,len(words_dict))]
return word
def play_hangman():
secret_word = get_word()
letters_guessed = set()
local_guesses= 0
max_guesses = 6
print("Hello there! You are about to play a game of hangman!. Enjoy...")
while not word_guessed(secret_word, letters_guessed) and local_guesses < max_guesses:
guess = input("Enter a letter: ")
if guess not in letters_guessed:
letters_guessed.add(guess)
local_guesses += 1
letters_guessed.add(guess)
else:
print("You already guessed that letter!")
print_guessed(letters_guessed)
if word_guessed(secret_word, letters_guessed):
print("You have won! The secret word was: " + secret_word)
elif local_guesses >= max_guesses:
print("You went over your maximum number of allotted guesses. The secret word was: " + secret_word)
def print_guessed(letters_guessed):
print("Your guesses are " + str(letters_guessed))
def word_guessed(secret_word, letters_guessed):
return set(secret_word).issubset(letters_guessed)
play_hangman()