我正在尝试创建一个绞刑者游戏。我的程序会根据随机选择的一组单词的长度突然停止。只有当你猜到单词或达到最大猜测次数时,它才会停止。
#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次猜测,以确定单词是妈妈,但程序在两次尝试后结束。
发布于 2019-06-13 10:12:23
在调用word_guessed时,在计算正确的字母数之前,不会将num_correct_letters重置为0。因此,一旦你猜对了一个字母,这个计数器就会继续增加,即使你没有猜对其他字母。如果它到达len(set(secret_word)),则循环结束。
没有必要检查while条件中的num_correct_letters,因为word_guessed()已经检查过了。
你不需要word_guessed中的循环,也不需要变量num_correct_letters,你可以简单地写:
def word_guessed():
global secret_word
global letters_guessed
return set(secret_word).issubset(letters_guessed)您也没有测试letters_guessed中的guess是否已经正确。使用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()https://stackoverflow.com/questions/56572261
复制相似问题