[英]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]
是e
, lettersGuessed[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.