簡體   English   中英

在python中比較兩個字符串時出錯

[英]Error while comparing two strings in python

def isWordGuessed(secretWord, lettersGuessed):
    '''
    secretWord: string, the word the user is guessing
    lettersGuessed: list, what letters have been guessed so far
    returns: boolean, True if all the letters of secretWord are in lettersGuessed;
      False otherwise
    '''
    score = 0
    tot = len(secretWord)
    for i in range(len(secretWord)):
       for j in range(len(lettersGuessed)):
           if (secretWord[i] == lettersGuessed[j]):
               score +=1
    if score == tot:
        return True 
    else:
         return False

對於大多數單詞和猜測字母m,它們會得到正確的答案,但同時提供sceretWord作為mangosteen和猜測為['z', 'x', 'q', 'm', 'a', 'n', 'g', 'o', 's', 't', 'e', 'e', 'n']輸出錯誤。

有什么建議,為什么?

看起來您可以使用:

set(secretWord).issubset(lettersGuessed)

確定猜測是否包括秘密單詞中的所有字母。

原因如下:

mangosteen有兩個相同的字符, e 您的代碼兩次遇到它,因此它增加了兩個分數。 secretWord[i]lettersGuessed[j]elettersGuessed[j]4

這是一個解決方案:

您可以簡單地使用set檢查每個唯一字母是否存在:

return all([True if i in set(g) else False for i in set(w)])

這使函數更短:)

演示:

>>> g = ['z', 'x', 'q', 'm', 'a', 'n', 'g', 'o', 's', 't', 'e', 'e', 'n']
>>> w = 'mangosteen'
>>> score = 0
>>> all([i for i in set(w) if i in set(g)])    
True

另一種方法是在找到所需字母后直接中斷內循環:

if secretWord[i] == lettersGuessed[j]
    score +=1
    break

希望這可以幫助!

我的最終答案應該適用於重復的字符,誤猜的字符等。關鍵是單詞的每個字符都應從猜中的字符列表中刪除; 如果失敗,則不會猜到字符(經常),我們應該返回False。

def isWordGuessed(secretWord, lettersGuessed):
    guesses_left = list(lettersGuessed)
    for character in secretWord:
        try:
            guesses_left.remove(character)
        except ValueError:
            return False  # remove failed
    return True  # all characters succeeded
def isWordGuessed(secretWord, lettersGuessed):
lst = []
for e in lettersGuessed:
    if e in secretWord:
        lst.append(e)
if len(lst) == len(secretWord):
    return True
return False

我做到了,它通過了所有案件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM