Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 猜测字符串中的正确字符和位置_Python - Fatal编程技术网

Python 猜测字符串中的正确字符和位置

Python 猜测字符串中的正确字符和位置,python,Python,我是一个非常新的编码,我正在努力与我的第一个代码之一 我想创建一个猜字游戏,用户一次猜几个字母的字符和位置。我坚持的步骤可以总结为: 猜测和选择输入的单词 检查所选单词的前两个字符中是否有两个字母的猜测(+每个正确字母加10分);及 检查两个字母的猜测是否位于所选单词的正确位置(每个正确字母+50分) 我似乎找不到这样做的方法。这就是我目前所拥有的。我想自己继续剩下的代码,但是,如果我不能通过第一步,那就太难了 def compute_score(guess,position,word):

我是一个非常新的编码,我正在努力与我的第一个代码之一

我想创建一个猜字游戏,用户一次猜几个字母的字符和位置。我坚持的步骤可以总结为:

  • 猜测和选择输入的单词
  • 检查所选单词的前两个字符中是否有两个字母的猜测(+每个正确字母加10分);及
  • 检查两个字母的猜测是否位于所选单词的正确位置(每个正确字母+50分)
  • 我似乎找不到这样做的方法。这就是我目前所拥有的。我想自己继续剩下的代码,但是,如果我不能通过第一步,那就太难了

    def compute_score(guess,position,word):
            """ Doc string """
    
            score = 0
            right_position_value = 100
            wrong_position_value = 20
            guess = input()
            position = pos for char in guess
            word_position = pos for char in word
    
            for char in word:
                if char in guess:
                        score += 10
                if position == word_position:
                        score += 50
                else:
                        score += 0
    
        return score
    
    guess_1 = input('guess the first 2 letters corresponding to letters 1 and2 of the unkown word!: ')
    print('Your guess and score were: ', guess, score)
    

    你比你想象的更接近完成第一步。你已经有了输入猜测的代码,现在你只需要做同样的事情来输入选定的单词。您可能希望通过以下方式更改输入消息:

    word = input('Choose your unknown word: ')
    guess = input('guess the first 2 letters corresponding to letters 1 and2 of the unkown word!: ')
    
    这就是第一步

    第2步和第3步需要做更多的工作,因为您的
    compute\u score
    函数存在一些问题。第一个问题是,您正在立即覆盖传入的某些参数的值:

    def compute_score(guess,position,word):
        """ Doc string """
    
        score = 0
        right_position_value = 100
        wrong_position_value = 20
        guess = input()  <-- This will prompt the user for input a third time, and then
                             overwrite their initial guess with this one. 
        position = pos for char in guess  <-- Same problem here
        word_position = pos for char in word
    
    我知道你想做什么,但是如果你要在下面的
    for
    循环中遍历单词的每个字母,你也可以计算每个字母在循环中的位置。在
    for
    循环中,您可以使用以下巧妙的小技巧:

    for idx, char in enumerate(word):
    
    这不仅提供单词的每个字母(
    char
    ),还提供循环的迭代次数(
    idx
    )。例如:

    >>> word = 'shape'
    >>> for idx, char in enumerate(word):
    ...     print(idx)
    ...
    0
    1
    2
    3
    4
    
    您可以使用此迭代计数值作为字母的位置,希望这能帮助您理解步骤3(诚然,我仍然不太确定
    位置
    参数的用途,或者位置猜测规则是如何工作的)

    对于步骤2,您也非常接近。目前,您正在检查两个字母的猜测是否在所选单词中的任何位置。要仅检查前两个字母,可以使用单词的子字符串。在Python中,这是通过在检查期间“切片”单词的前两个字母以外的所有字母来完成的:

    for char in word:
        if char in guess[:2]:
                score += 10
    
    砰的一声,开始了

    但是,我想让您知道,您的代码中还有一些其他问题,主要问题是最后一行中的
    guess
    score
    变量没有定义,并且您从来没有实际调用
    compute\u score
    函数。在最后一行中,您应该这样称呼它:

    word = input('Choose your unknown word: ')
    guess = input('guess the first 2 letters corresponding to letters 1 and2 of the unkown word!: ')
    
    print('Your guess and score were: ', guess, calculate_score(guess, 0, word))
    

    在这个例子中,我只是将
    0
    作为
    position
    传入,因为游戏的位置规则对我来说仍然是未知的。但是,如果您给出更详细的解释,我可以编辑此内容。

    请将您的问题分解为更小的部分,并发布一个包含所需输入和所需输出的可复制示例。我打赌你能用不超过4行的代码描述你正在努力解决的问题。请修复你的缩进。除了我最近的尝试,我删除了所有代码。至于缩进,我改变了所有我知道不合适的东西。我知道这是我需要解决的问题。我不太确定你希望它如何工作,但你的意思是说
    for loop
    return
    语句处于某种函数中吗?是的,对不起,这部分的函数将是一个计算分数(猜测、位置、单词)函数。例如,如果我输入compute_score('abc',0,'share'),分数将是10,因为单词'shape'中有一个'a'。但是如果它的计算分数('bac',1,'毯子'),分数将是70,因为'b'在正确的位置,并且'a'和'b'猜测在单词中。嗨,Mat。非常感谢你的帮助!我将尝试更清楚地解释代码的目的:步骤1用户将猜测与未知单词的前两个字母对应的两个字母。他们在单词中猜出的每个字母都会得到10分(不管位置如何),在正确位置猜出的任何字母都会得到50分。步骤2:用户猜测与未知单词的前3个字母对应的3个字母。第3步,用户猜测字母2-4的3个字母…第4步,3-5 ect的3个字母猜测。我将尽最大努力包含inx for循环。我计划制作一个猜测提示(步长、长度)函数,同时要求用户输入。例如>>>guess=guessprompt(0,2)'guess关于未知单词的字母1到2的两个字母:'但是我认为一旦我关闭了computescore函数,我应该能够解决这个问题。computescore(guess,step,selectedword)函数的工作原理如下:>>>>computescore(abc,0,'bridge')10(猜测字母b,但不是正确的位置。
    计算分数('abc',1,'bridge')
    计算分数('abc',2,'bridge')
    计算分数('abc',3,'bridge')
    计算分数('abc',4',bridge')
    计算分数('abc',5',bridge')
    ?它们与
    计算分数('abc',0',bridge')
    有什么不同吗?为什么/为什么没有?应该
    计算分数('bac',0',bridge')
    计算分数('bac',1,
    bridge
    )和
    计算分数('bac',2,
    )全部返回60分?如果位置参数为1而不是0,为什么
    计算分数('bac',1',毯子')
    返回70分?抱歉混淆。位置值将是游戏中的步骤。因此步骤0涉及猜测字母1-2,步骤1涉及猜测字母1-3,步骤2..字母2-4,(2,3,4)…步骤3.字母3-5,步骤4-字母4-6.因此计算分数(abc,1,bridge)基本上是看“abc”是否在“bri”中。A“b”在他们的猜测中,但不是正确的位置,所以他们得到10分。如果是(abc,3,bridge)->在“idg”中变成了“abc”,所以他们会得到0分。同样,如果是
    word = input('Choose your unknown word: ')
    guess = input('guess the first 2 letters corresponding to letters 1 and2 of the unkown word!: ')
    
    print('Your guess and score were: ', guess, calculate_score(guess, 0, word))