2017-08-10 74 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

相關問題