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