【问题标题】:Hangman prints word multiple times if a letter occurs multiple times如果一个字母出现多次,Hangman 会多次打印单词
【发布时间】:2020-01-07 13:16:01
【问题描述】:

我正在构建一个刽子手游戏。如果一个字母出现多次,我编写的代码会多次打印“更新的目标词”。

示例:目标词是“庆祝”。如果我猜e 会打印出来

*e******
*e*e****
*e*e***e

我想避免打印前两个打印输出,只打印第三个也是最新版本。

import random
import re

word_list = ["fireboard", "identical", "chocolate", "christmas", "beautiful", "happiness", "wednesday", "challenge", "celebrate"]

random_pick = random.choice(word_list)
random_pick_a = re.sub("[a-z]","*", random_pick)
random_pick_list_a = list(random_pick_a)
print(random_pick)
count = 0


def main_function():
    global count
    while count <= 9:
        user_input = str(input("type a letter:"))
        for i, c in enumerate(random_pick):
            if c == user_input.casefold():
                random_pick_list_a[i] = user_input.casefold()
                random_pick_list_b = ''.join(random_pick_list_a)
                print(random_pick_list_b)
                if random_pick_list_b == random_pick:
                    print("done")
                    exit()
                else:
                    continue
        else:
            if user_input.casefold() not in random_pick:
                count = count+1
                print(count)
                if count == 10:
                    print("sorry")
                    exit()


main_function()

免责声明:我正处于编码的第一周!

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

    不需要str()input(),它已经是一个字符串了。所以将str(input("type a letter:")) 剥离为input("type a letter:")

    不需要

    else:
        continue
    

    即使没有它,它也会继续。不要使用globals,只需将您的count 移动到main_function()

    不要这样做if count == 10,你已经在while count &lt;= 9这样做了。

    至于你的问题 - 移动块

    print(random_pick_list_b)
    if random_pick_list_b == random_pick:
        print("done")
        exit()
    

    退出for循环。所以整个事情看起来像这样:

    def main_function():
        count = 0
        while count <= 4:
            user_input = input("type a letter:")
            for i, c in enumerate(random_pick):
                if c == user_input.casefold():
                    random_pick_list_a[i] = user_input.casefold()
                    random_pick_list_b = ''.join(random_pick_list_a)
            print(random_pick_list_b)
            if random_pick_list_b == random_pick:
                print("done")
                exit()
            else:
                if user_input.casefold() not in random_pick:
                    count = count+1
                    print(count)
        print("sorry")
    

    【讨论】:

      【解决方案2】:

      你有:

      print(random_pick_list_b)
      

      for 循环中检查所选字母的每个字符。因此,每次找到匹配项时,它都会打印出random_pick_list_b

      如果您想在检查完成后执行一次,请将其移至 for 循环之后。

      我会在 for 循环之前进行一次检查。

      【讨论】:

      • 我认为那是错误的 - 没关系。我不熟悉 for-else - 感谢您向我展示这一点!
      猜你喜欢
      • 1970-01-01
      • 2014-11-12
      • 1970-01-01
      • 2018-05-04
      • 1970-01-01
      • 1970-01-01
      • 2020-12-21
      • 1970-01-01
      • 2018-03-18
      相关资源
      最近更新 更多