wordle中的重复字母
Duplicate letters in wordle
对于一个学校项目,我必须在 Python 中创建一个 wordle。我创建的程序比较目标词和猜测词的字母。举个例子:目标词是“compulsory”,猜词是“submission”。输出应为“-O-O--X-O-”。
"X" 表示被猜单词中的字母也在目标单词中并且在同一位置。
“O”表示猜测的单词中的字母也在目标单词中,但不在同一位置。
"-"表示打错字母了。
但我似乎找不到处理重复字母的方法。例如,如果目标词是“teethe”而猜测的词是“health”,它应该给我输出:“OX--O-”。虽然我的程序 returns 输出:“OX--OO”。
我的代码:
def compare(guess, target):
output = ""
for i in range(target.__len__()):
if guess[i] == target[i]:
output = output + "X"
elif guess[i] in target:
output = output + "O"
else:
output = output + "-"
return output
print(compare("health", "teethe"))
希望我提供的信息足以让您了解我的 question/problem。
提前感谢您的帮助!
这花了我一段时间才解决,但我想我明白了。
这是我实现的解决方案:
def compare(guess: str, target: str):
output = ["-"] * len(target)
for index, (guess_letter, target_letter) in enumerate(zip(guess, target)):
if guess_letter == target_letter:
output[index] = "X"
target = target.replace(guess_letter, "-", 1)
for index, (guess_letter, target_letter) in enumerate(zip(guess, target)):
if guess_letter in target and output[index] == "-":
output[index] = "O"
target = target.replace(guess_letter, "-", 1)
return ''.join(output)
print(compare('health', 'teethe'))
print(compare('submission', 'compulsory'))
这是一个相同的解决方案,它使用更简单(但不那么“Pythonic”)的工具:
def compare(guess, target):
length = len(target)
output = ["-"] * length
for index in range(length):
if guess[index] == target[index]:
output[index] = "X"
target = target.replace(guess[index], "-", 1)
for index in range(length):
if guess[index] in target and output[index] == "-":
output[index] = "O"
target = target.replace(guess[index], "-", 1)
return ''.join(output)
print(compare('health', 'teethe'))
print(compare('submission', 'compulsory'))
输出:
OX--O-
-O-O--X-O-
以下是我的关键技术:
- 首先创建输出字符串,这样我们就有办法检查给定的点是否已经用
'X'
标记了。我最初将其作为列表维护,然后在返回时将其转换为字符串。
- 如果我们“用完”目标字符串中的一个字母,我们通过将其设置为
'-'
. 来“禁用”它
- 首先检查所有完全匹配项(即导致
'X'
的内容)。
这可能不是最漂亮的解决方法。但是您可以使用一种方法,那就是将目标中的字母保存为一个额外的字符串,这样您就可以“记住”它们。之后你可以将字符串添加到你的 elif 中,如果猜测的字母不在数组中,它会添加一个“O”,如果是,将计算 else 并添加“-”。这应该处理你想要的结果。希望有所帮助
def compare(guess, target):
output = ""
isGuessInTarget = ""
for i in range(target.__len__()):
if guess[i] == target[i]:
output = output + "X"
elif (guess[i] in target) and not (guess[i] in isGuessInTarget):
output = output + "O"
isGuessInTarget = isGuessInTarget + guess[i]
else:
output = output + "-"
return output
print(compare("health", "teethe"))
eccentricOrange - 感谢代码帮助。我能够利用 Python 代码并将其转换为 Visual Basic。所以对于那些需要 VB 版本的人来说,这是我想出的代码。
Function Compare(Guess As String, Target as String) As String
Dim Output As String = "-----"
'Match all of the Exact Match Characters first
For i = 1 To 5
If Guess.Substring(i - 1, 1) = Target.Substring(i - 1, 1) Then
Output = Output.Remove(i - 1, 1).Insert(i - 1, "X")
Target = Target.Remove(i - 1, 1).Insert(i - 1, "-")
End If
Next
'Next Match Characters in the word but in the wrong spot
For i = 1 To 5
For j = 1 To 5
If (Guess.Substring(j - 1, 1) = Target.Substring(i - 1, 1)) And Output.Substring(j - 1, 1) = "-" Then
Output = Output.Remove(j - 1, 1).Insert(j - 1, "O")
Target = Target.Remove(i - 1, 1).Insert(i - 1, "-")
End If
Next
Next
Compare = Output
End Function
对于一个学校项目,我必须在 Python 中创建一个 wordle。我创建的程序比较目标词和猜测词的字母。举个例子:目标词是“compulsory”,猜词是“submission”。输出应为“-O-O--X-O-”。
"X" 表示被猜单词中的字母也在目标单词中并且在同一位置。 “O”表示猜测的单词中的字母也在目标单词中,但不在同一位置。 "-"表示打错字母了。
但我似乎找不到处理重复字母的方法。例如,如果目标词是“teethe”而猜测的词是“health”,它应该给我输出:“OX--O-”。虽然我的程序 returns 输出:“OX--OO”。
我的代码:
def compare(guess, target):
output = ""
for i in range(target.__len__()):
if guess[i] == target[i]:
output = output + "X"
elif guess[i] in target:
output = output + "O"
else:
output = output + "-"
return output
print(compare("health", "teethe"))
希望我提供的信息足以让您了解我的 question/problem。
提前感谢您的帮助!
这花了我一段时间才解决,但我想我明白了。
这是我实现的解决方案:
def compare(guess: str, target: str):
output = ["-"] * len(target)
for index, (guess_letter, target_letter) in enumerate(zip(guess, target)):
if guess_letter == target_letter:
output[index] = "X"
target = target.replace(guess_letter, "-", 1)
for index, (guess_letter, target_letter) in enumerate(zip(guess, target)):
if guess_letter in target and output[index] == "-":
output[index] = "O"
target = target.replace(guess_letter, "-", 1)
return ''.join(output)
print(compare('health', 'teethe'))
print(compare('submission', 'compulsory'))
这是一个相同的解决方案,它使用更简单(但不那么“Pythonic”)的工具:
def compare(guess, target):
length = len(target)
output = ["-"] * length
for index in range(length):
if guess[index] == target[index]:
output[index] = "X"
target = target.replace(guess[index], "-", 1)
for index in range(length):
if guess[index] in target and output[index] == "-":
output[index] = "O"
target = target.replace(guess[index], "-", 1)
return ''.join(output)
print(compare('health', 'teethe'))
print(compare('submission', 'compulsory'))
输出:
OX--O-
-O-O--X-O-
以下是我的关键技术:
- 首先创建输出字符串,这样我们就有办法检查给定的点是否已经用
'X'
标记了。我最初将其作为列表维护,然后在返回时将其转换为字符串。 - 如果我们“用完”目标字符串中的一个字母,我们通过将其设置为
'-'
. 来“禁用”它
- 首先检查所有完全匹配项(即导致
'X'
的内容)。
这可能不是最漂亮的解决方法。但是您可以使用一种方法,那就是将目标中的字母保存为一个额外的字符串,这样您就可以“记住”它们。之后你可以将字符串添加到你的 elif 中,如果猜测的字母不在数组中,它会添加一个“O”,如果是,将计算 else 并添加“-”。这应该处理你想要的结果。希望有所帮助
def compare(guess, target):
output = ""
isGuessInTarget = ""
for i in range(target.__len__()):
if guess[i] == target[i]:
output = output + "X"
elif (guess[i] in target) and not (guess[i] in isGuessInTarget):
output = output + "O"
isGuessInTarget = isGuessInTarget + guess[i]
else:
output = output + "-"
return output
print(compare("health", "teethe"))
eccentricOrange - 感谢代码帮助。我能够利用 Python 代码并将其转换为 Visual Basic。所以对于那些需要 VB 版本的人来说,这是我想出的代码。
Function Compare(Guess As String, Target as String) As String
Dim Output As String = "-----"
'Match all of the Exact Match Characters first
For i = 1 To 5
If Guess.Substring(i - 1, 1) = Target.Substring(i - 1, 1) Then
Output = Output.Remove(i - 1, 1).Insert(i - 1, "X")
Target = Target.Remove(i - 1, 1).Insert(i - 1, "-")
End If
Next
'Next Match Characters in the word but in the wrong spot
For i = 1 To 5
For j = 1 To 5
If (Guess.Substring(j - 1, 1) = Target.Substring(i - 1, 1)) And Output.Substring(j - 1, 1) = "-" Then
Output = Output.Remove(j - 1, 1).Insert(j - 1, "O")
Target = Target.Remove(i - 1, 1).Insert(i - 1, "-")
End If
Next
Next
Compare = Output
End Function