Python 如何在我的刽子手代码中替换两个猜测而不是下划线? 所以我已经制作了我的刽子手代码,当有两个正确的猜测时,我在编码它的中间,但是当有两个正确的猜测时,它只会说这个词包含“x”,但不会代替下划线,就像第一次正确猜测一样。

Python 如何在我的刽子手代码中替换两个猜测而不是下划线? 所以我已经制作了我的刽子手代码,当有两个正确的猜测时,我在编码它的中间,但是当有两个正确的猜测时,它只会说这个词包含“x”,但不会代替下划线,就像第一次正确猜测一样。,python,Python,我建议从头开始,使用能够更好地映射问题的数据结构 例如: 使用一个集合(这是一个具有常数时间查找的无序数据结构)或一个字典(其中一个集合是退化的情况)来跟踪已经猜测的字母。若要重新生成要显示的单词,请将集合中未包含的所有字符转换为下划线。执行此操作时,将对任意数量的未隐藏字符使用完全相同的逻辑,以防止出现您在此处遇到的情况(某些操作仅在恰好有一个未隐藏字符的情况下才能正常工作) 将程序逻辑从用户输入中分离出来,将逻辑分解为尽可能可重用的组件。例如,如果您有一个函数: dashes = ""

我建议从头开始,使用能够更好地映射问题的数据结构

例如:

  • 使用一个集合(这是一个具有常数时间查找的无序数据结构)或一个字典(其中一个集合是退化的情况)来跟踪已经猜测的字母。若要重新生成要显示的单词,请将集合中未包含的所有字符转换为下划线。执行此操作时,将对任意数量的未隐藏字符使用完全相同的逻辑,以防止出现您在此处遇到的情况(某些操作仅在恰好有一个未隐藏字符的情况下才能正常工作)
  • 将程序逻辑从用户输入中分离出来,将逻辑分解为尽可能可重用的组件。例如,如果您有一个函数:

    dashes = ""   
    for i in word_chosen: 
        dashes = dashes+"_ "  
    
    def get_guess():
        guess = ""
        guess = input("Please can you enter a guess for hangman: ")
        return guess
    
    def check_guess(dashes):
        if len(guess)>1:
               print("word")
        else:
             if guess in word_chosen: 
                 print("The word contains an ",guess)
                    # Yes option
                 dashes_tem = " "
                 count = 0
                  # new variable made 
                 for i in word_chosen:
                 # loop through the word chosen
                     if i == guess:# check word against guess
                         dashes_tem = dashes_tem + i + " "
                     else:
                         dashes_tem = dashes_tem + dashes[(count*2)] + " "
                     count = count + 1
    
                 return dashes_tem
             else:
                  print("The word doesn't contain an",guess)
                  # No option - will come back
    
    guess = get_guess()
    dashes = check_guess(dashes)
    print(dashes)             
    guess = get_guess()
    dashes = check_guess(dashes)
    print(dashes)
    
    …然后您可以执行以下操作:

    hide_unguessed(real_word, guessed_letters)
    
    …在该功能之外,而不是将其放在内部

  • 宁愿存储和操作直接映射到问题空间的状态(目标词,到目前为止猜测的字母),而不是可以从该内容(当前未隐藏的字母集)派生的状态

可以用作构建块的函数可能如下所示:

if hide_unguessed(real_word, guessed_letters) == real_word:
  print "You win!"

请注意,这些都是纯函数——如果您知道它们的输入是什么,您将始终知道它们的返回值是什么(它们不依赖于用户输入之类的不可预测的内容),并且它们除了返回值之外没有任何副作用。尽可能使用纯函数——这些函数比其他代码更容易推理和测试。

什么是
破折号
初始化为?@Synergist dashes=“”#将破折号重置为单词中i的空格。\u选择:破折号=破折号+“#”#循环单词中的字母#用破折号和空格替换破折号。例如"AB1你的评论令人费解。请先通读。我建议您通读一些Python教程。你做了太多的工作,重做Python免费提供给你的东西。示例1:
破折号=“”;对于所选单词中的i:破折号=破折号+“\code>可以重写
破折号=”\u'*len(所选单词)
。另外,
i
作为循环变量通常意味着一个数字,但这并不重要。示例2:用于替换的巨大循环基本上是重新定义(不太可靠)Python的字符串内置方法。@AB1听两位炼金术士说。学习良好的编码实践和如何使用标准库比专注于你的代码进行人为的练习更重要。不可能重新开始有一个最后期限。别担心。有一个最后期限更能让你以一种易于推理的方式去做一件事——这样你就不用花时间去摸索了猜测和测试循环(我的意思是在开发过程中,而不是在文字代码中)。
def check_guess(real_word, guessed_letter):
  return guessed_letter in real_word

def hide_unguessed(real_word, guessed_letters):
  return ''.join([letter if letter in guessed_letters else '_' for letter in real_word])