循环将不会按预期运行

问题描述 投票:0回答:2

我只是在学习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

python
2个回答
1
投票

第二次输入'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
 ...

0
投票

我看到您已经根据其他答案对代码进行了重大编辑。您不能停止说您已经赢了的最后一个问题是,因为代码从未达到过赢的条件,就像输入的字母正确与否一样,在测试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.")
© www.soinside.com 2019 - 2024. All rights reserved.