我正在為類似于 wordle 的游戲撰寫代碼,我需要比較 2 個字串
- 如果字符和位置相同則回傳
- - 如果字符在
guess回傳answer但錯誤的位置* - 如果字符完全不在
answer回傳.
如果我的答案有 2 個相似的字符(例如,guess:accept、answer:castle),*則只能回傳一次,這意味著預期的輸出將是**.*.*
考慮到位置,我似乎也無法迭代字串
def process(guess: str, answer: str) -> str:
output = ""
for i,ch in enumerate(guess):
if ch not in answer:
output = '.'
elif ch != answer[i]:
output = '*'
else:
output = '-'
return output
uj5u.com熱心網友回復:
您不跟蹤已在 中識別的字符answer,您可以添加一個跟蹤器字串來檢查識別的字符:
def process(guess: str, answer: str) -> str:
output = ""
already_identified_characters = set()
for i, ch in enumerate(guess):
if ch not in answer or ch in already_identified_characters:
output = "."
elif ch != answer[i]:
output = "*"
else:
output = "-"
already_identified_characters.add(ch)
return output
uj5u.com熱心網友回復:
如果guess和answer長度相等,這就是您可以實作它的方式:
def process(guess: str, answer: str) -> str:
output = []
misplaced_chars = set()
for g,a in zip(guess,answer):
if g == a:
# Identical character on same location
output.append('-')
elif g in answer and g not in misplaced_chars:
# Character exists in answer
output.append('*')
misplaced_chars.add(g)
else:
# Wrong guess
output.append('.')
return ''.join(output)
uj5u.com熱心網友回復:
用于跟蹤答案中使用Counter的字母,您可以確保如果字母在 中重復answer,它們也能正常作業。
基本上,您跟蹤輸入中每個字母的計數,并在遇到匹配時從中減去。
from collections import Counter
def process(guess: str, answer: str) -> str:
countAnswer = Counter(answer)
output = ""
for i,ch in enumerate(guess):
if ch not in answer:
output = '.'
elif countAnswer[ch]==0:
output = '.'
elif ch != answer[i] and countAnswer[ch]!=0:
output = '*'
countAnswer[ch]-=1
else:
output = '-'
return output
這應該與 Wordle 對重復字符的處理非常相似。
各種輸入及其輸出:
>>> process("crate","watch")
'*.**.'
>>> process("crate","slosh")
'.....'
>>> process("pious","slosh")
'..-.*'
>>> process("pesos","slosh")
'..***'
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/448817.html
