首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python - Hangman

Python - Hangman
EN

Stack Overflow用户
提问于 2020-04-26 11:29:16
回答 3查看 3.6K关注 0票数 0

我刚刚写了一个程序来玩Hangman游戏,但是有一个问题困扰着我,我一直没能弄清楚。

程序正确地评估所选字符是否在要猜测的单词中,以及它在单词中的位置(即使该字符出现不止一次)。尽管如此,在玩游戏的时候,不管你完全猜到了这个词,还是你已经没有生命了,你都需要比需要多一个回合。

比如说,你必须猜到“你好”这个词。我希望程序运行的方式如下:

转1:'h‘。转2: e。第三圈:“我”。转4圈:O。程序应该停止在这里,但它需要另一个字符(任何),以承认游戏已经完成。

这是我的密码:

代码语言:javascript
复制
def play_game():

    # Pick word randomly from list
    random_num = random.randint(0, (len(words_list) - 1))
    current_word = list(words_list[random_num].upper())
    print(current_word)
    print('The word has', str(len(current_word)), 'characters')

    current_letter = input('Pick a letter: ').upper() #User input
    picked_letters = []
    correct_ones = []
    for i in range(len(current_word)):
        correct_ones.append('_ ')

    lifes = 3
    while lifes != 0:

        # Check if all characters have been already guessed
        if current_word == correct_ones:
            print('You won!')
            break

        # Check if character has already been chosen
        elif current_letter in picked_letters:
            print('You already chose this letter!')
            current_letter = input('Pick another letter: ').upper()
            continue

        # Check if character is in word
        if current_letter in current_word:
            index_list = []
            for i in range(len(current_word)): #Get indexes of character in word
                if current_word[i] == current_letter:
                    index_list.append(i)

            picked_letters.append(current_letter) #Append to keep track of chosen characters         
            for i in index_list:
                correct_ones[i] = current_letter.upper() #Append to correct position

            print('Correct!')
            for i in correct_ones:
                print(i + ' ', end='')
            current_letter = input('Pick another letter: ').upper()

        # Incorrect character
        else:
            picked_letters.append(current_letter)
            lifes -= 1
            print('Incorrect')
            print('You have', str(lifes), 'lifes left')
            current_letter = input('Pick another letter: ').upper()
            continue


play_game()

如果您在我的代码中看到任何不好的实践,请告诉我!

提前感谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-04-26 11:36:39

您在循环结束时向用户请求输入。因此,当您输入最后一个正确的字符时,再次请求用户输入:

代码语言:javascript
复制
print('Correct!')
for i in correct_ones:
    print(i + ' ', end='')
current_letter = input('Pick another letter: ').upper()

要解决这个问题,您可以将循环开始时所做的检查移到那里。因为在游戏开始时,没有输入,所以单词永远不应该被正确地猜测(除非真正的单词是空的,但不应该这样!)因为只有猜测一个正确的字符才能让你获胜,所以在那里检查它是有意义的。希望这有帮助,玩得开心点:)

票数 1
EN

Stack Overflow用户

发布于 2020-04-26 12:00:07

我对您的代码做了一些修改。现在,它如预期的那样工作。

代码语言:javascript
复制
def play_game():

    # Pick word randomly from list
    random_num = random.randint(0, (len(words_list) - 1))
    current_word = list(words_list[random_num].upper())
    print(current_word)
    print('The word has', str(len(current_word)), 'characters')

    picked_letters = []
    correct_ones = []
    for i in range(len(current_word)):
        correct_ones.append('_ ')

    lifes = 3
    while lifes != 0:

        # Check if all characters have been already guessed
        if current_word == correct_ones:
            print('You won!')
            break

        current_letter = input('Pick a letter: ').upper()

        # Check if character has already been chosen
        if current_letter in picked_letters:
            print('You already chose this letter!')
            continue

        # Check if character is in word
        if current_letter in current_word:
            index_list = []
            for i in range(len(current_word)):  # Get indexes of character in word
                if current_word[i] == current_letter:
                    index_list.append(i)

            picked_letters.append(current_letter)  # Append to keep track of chosen characters
            for i in index_list:
                correct_ones[i] = current_letter.upper()  # Append to correct position

            print('Correct!')
            for i in correct_ones:
                print(i + ' ', end='')

        # Incorrect character
        else:
            picked_letters.append(current_letter)
            lifes -= 1
            print('Incorrect')
            print('You have', str(lifes), 'lifes left')
            continue


play_game()
票数 1
EN

Stack Overflow用户

发布于 2021-01-08 18:39:24

下面是一个快速循环,它将添加您的猜测并将您的单词添加到"-“中。

代码语言:javascript
复制
while tries > 0:
    hiddenphrase = ""
    for char in word:
        if char in guessed:
            hiddenphrase = hiddenphrase + char
        elif char in letters:
            hiddenphrase = hiddenphrase + "-"
        else:
            hiddenphrase = hiddenphrase + char
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61439927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档