2017-08-10 68 views
4

我对编码非常陌生,而且我正在努力处理我的第一个代码。猜测字符串中的正确字符和位置

我想创建一个单词猜测游戏,其中用户一次猜测几个字母的字符和位置。我坚持的步骤可以概括为:

  1. 猜测和选定的单词inputed;
  2. 检查选定单词的前2个字符是否包含两个字母(每个正确字母+10个点);和
  3. 检查两个字母的猜测是否在所选单词的正确位置(每个正确字母+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) 
+1

请将您的问题分解为较小的零件,并发布一个可重复使用的小例子,其中包含所需的输入和所需的输出。我敢打赌,你可以用不超过4行的代码描述你正在挣扎的东西。 –

+0

并修复您的缩进请 –

+0

我删除了除最近一次尝试以外的所有代码。至于缩进,我改变了我所知道的所有不合适的地方。我知道这是我需要处理的事情。 –

回答

1

你比你想象的更接近朝着完成第1步你已经拥有的代码输入的猜测,现在你只需要做同样的事情输入所选词。您可能需要更改输入消息:

word = input('Choose your unknown word: ') 
guess = input('guess the first 2 letters corresponding to letters 1 and2 of the unkown word!: ') 

这就是第1步!

步骤2和步骤3将需要更多的工作,因为你的compute_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 

如果重新分配这些变量之前,你甚至使用它们,再有就是没有一点使他们参数的函数首先。但是,即使你解决了这个问题,你仍然会从此得到一个错误:

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步(诚然,我还不太清楚的position参数或怎么的目的猜测规则的工作)

对于第2步,你也很接近。目前您正在检查所选字中是否有这两个字母的猜测。要仅检查前两个字母,您可以使用该字的子字符串。在Python中,这是通过“切割”完成所有,但在检查过程中单词的前两个字母:

for char in word: 
    if char in guess[:2]: 
      score += 10 

和吊杆有亚去。

但是,我想让你知道在你的代码中还有一些其他问题,主要的一点是最后一行中的guessscore变量没有在任何地方定义,并且你永远不会实际调用功能compute_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,因为本场比赛的位置规则仍然失去了我的例子。不过,如果您提供更详细的解释,我可以编辑它。

+0

Hi Mat。非常感谢您的帮助! 我会尝试更清楚地解释代码的用途: 步骤1用户将猜测与未知单词的前两个字母对应的2个字母。他们会得到10分,每个猜字母(不管位置),每个字母猜测是在正确的位置50分。 步骤2用户猜测与未知单词的前3个字母对应的3个字母。 第3步,用户猜字母2-4的3个字母...第4步,3个字母的猜测3-5等。我会尽我所能包括循环的inx。 –

+0

我打算做一个猜测(步长,长度)函数以及询问用户输入。例如 >>> guess = guessprompt(0,2) '关于未知单词的字母1到2的猜测2个字母:' 但是我认为一旦我有了computescore功能,我应该能够解决这个问题。 computescore(guess,step,selectedword)函数应该像这样工作: >>> computescore(abc,0,'bridge') 10(猜到字母b,但不是正确的位置 –

+0

'compute_score ('abc',1,'bridge')''''compute_score('abc',2,'bridge')''''compute_score('abc',3,'bridge')''''compute_score('abc', 4,'bridge')''和'compute_score('abc',5,'bridge')'?它们与compute_score('abc',0,'bridge')'有什么不同,为什么? 'compute_score('bac',0,'bridge'),'compute_score('bac',1,'bridge')和compute_score('bac',2,'bridge')都应该返回60点?为什么'compute_score('bac',1,'blanket')'如果位置参数是1而不是0,则返回70点? – MatTheWhale

相关问题