程序根据任意字的长度突然停止
Program abruptly stops based on the length of an arbitrary word
我正在尝试制作刽子手游戏。我的程序根据所选随机单词集的长度突然停止。只有在您猜到单词或达到最大猜测次数后,它才会停止。
#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 次猜测来确定单词是妈妈,但程序在尝试两次后结束。
当您调用 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)
您也没有测试 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()
我正在尝试制作刽子手游戏。我的程序根据所选随机单词集的长度突然停止。只有在您猜到单词或达到最大猜测次数后,它才会停止。
#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 次猜测来确定单词是妈妈,但程序在尝试两次后结束。
当您调用 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)
您也没有测试 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()