我只是在学习python,我正在尝试制作hangman,但是我遇到了两个问题。首先,当您两次输入相同的字母时,它符合我的两个条件,并且两次提示均被打印两次。例如:
> C:\Users\Me\PycharmProjects\Python\venv\Scripts\python.exe C:/Users/Me/PycharmProjects/Python/Hangman.py
shark
There are 5 letters in this word.
You have 3 wrong guesses left.
Guess a letter.
s
Good guess. That letter was in the word.
You have 3 wrong guesses left.
Guess a letter.
s
*You already entered that letter.
Good guess. That letter was in the word.*
You have 3 wrong guesses left.
Guess a letter.
我遇到的另一个问题是取得胜利。如果correct_guesses达到零,它应该结束游戏,但实际上不起作用,因为它总是在4次正确输入之后结束游戏。
import random
my_list = ["hangman", "dragon", "tiger", "octopus", "shark", "money", "school", "stadium", "biker", "whale", "sphinx"]
my_list2 = []
word = random.choice(my_list)
print(word) #Delete later
print("There are", len(word), "letters in this word.")
def start():
guesses_left = 3
correct_guesses = len(set(word))
while guesses_left > -1:
print("You have", str(guesses_left), "wrong guesses left.\n")
guess = input("Guess a letter. \n").lower()
if len(guess) != 1:
print("Please enter a single letter.")
continue
if guess in my_list2:
print("You already entered that letter.")
continue
if guess not in my_list2:
my_list2.append(guess)
if guess in word:
print("Good guess. That letter was in the word.")
correct_guesses -= 1
continue
if guess not in word:
print("That letter isn't in the word.")
guesses_left -= 1
continue
if correct_guesses == 0:
print("Congratulations! You won the game.")
break
if guesses_left <= 1:
print("Sorry, you lost. Play again.")
start()
print(my_list2) #Delete later
第二次输入's'仍然匹配:
if guess in word:
print("Good guess. That letter was in the word.")
correct_guesses -= 1
怎么样:
if guess in word and guess not in my_list2:
print("Good guess. That letter was in the word.")
correct_guesses -= 1
或者您可以将整体结构更改为:
if
...
elif
...
else
...
我看到您已经根据其他答案对代码进行了重大编辑。您不能停止说您已经赢了的最后一个问题是,因为代码从未达到过赢的条件,就像输入的字母正确与否一样,在测试continue
之前它将打到correct_guesses == 0
。您可以通过简单地将测试移至循环的开始而不是结束来解决此问题。
def start():
guesses_left = 3
correct_guesses = len(set(word))
while guesses_left > -1:
if correct_guesses == 0: #
print("Congratulations! You won the game.") # Move it here
break #
print("You have", str(guesses_left), "wrong guesses left.\n")
guess = input("Guess a letter. \n").lower()
if len(guess) != 1:
print("Please enter a single letter.")
continue
if guess in my_list2:
print("You already entered that letter.")
continue
if guess not in my_list2:
my_list2.append(guess)
if guess in word:
print("Good guess. That letter was in the word.")
correct_guesses -= 1
continue
if guess not in word:
print("That letter isn't in the word.")
guesses_left -= 1
continue
if guesses_left <= 1:
print("Sorry, you lost. Play again.")