我不知道如何使代码正常工作。我对解决方案感到困惑,其他条件对我不起作用。最后,答案不一样。
def guess_word(S: str, Q: str):
answers = []
for i in range(len(S)):
if S[i] == Q[i]:
answers.append("correct")
elif Q[i] != S[i]:
for j in range(len(Q)):
if Q[i] == S[j] and Q[j] != S[j]:
answers.append('present')
else:
answers.append("absent")
return answers
if __name__ == "__main__":
S = input()
Q = input()
print(*guess_word(S, Q), sep="\n")
Sasha 正在开发猜字游戏。在这个游戏中,玩家必须多次尝试猜出 N 个字母的隐藏单词。目前,萨沙面临着编写用于检查玩家尝试与隐藏词的重合值的逻辑的任务。
更正式地说,让有一个字符串 S - 隐藏的单词和一个字符串 Q - 玩家的尝试。两个字符串的长度 N 相同。对于字符串 Q 的每个位置 1 ≤ i ≤ N,您需要计算该位置与字符串 S 的匹配类型。
如果 Qi=Si,则在位置 i 匹配类型必须等于正确。
如果 Qi≠Si,但存在另一个位置 1≤j≤N 使得 Qi=Sj,则在位置 i 处必须存在匹配类型。
字符串 S 的每个字母最多可用于一次正确匹配或当前匹配。始终优先考虑正确的类型。从当前类型的所有可能用例中,Sasha 的程序选择字符串 Q 中最左边的位置。在其余位置,匹配类型必须不存在。
笔记
第一个测试用例的解释。Q1=S1 和 Q5=S5,所以对于位置 1 和 5,答案是正确的。Q3=S4,所以对于位置 3,答案是存在的。字母 L 和 A 不会出现在字符串 S 中,因此对于位置 2 和 4,答案不存在。
第二个测试用例的解释。Q1=S1 和 Q4=S4,所以对于位置 1 和 4,答案是正确的。字母 A 不再出现在字符串 S 中,因此对于位置 2 和 3,答案不存在。
第三个测试用例的解释。Q2=S2,所以对于位置 2,答案是正确的。Q1=S4,Q3=S1 和 Q4=S3,所以对于位置 1、3 和 4,答案是存在的。字母 A 出现在字符串 S 的位置 1,但它已经存在(Q3=S1),因此对于位置 5,答案不存在。
示例 1:
Ввод: Вывод:
COVER correct
CLEAR absent
present
absent
correct
示例 2:
Ввод: Вывод:
ABBA correct
AAAA absent
absent
correct
示例 3:
Ввод: Вывод:
ABCBC present
BBACA correct
present
present
absent
主要问题:这段代码永远不会写“缺席”,因为
S[i]
要么等于Q[i]
(然后执行分支if
)或不等于Q[i]
(然后执行分支elif
)。分支else
永远不会被执行,因为没有两个字母同时相同和不同。因此,您需要更改条件,或者完全摆脱第二个条件。我们走第一条路。因为 猜到的字母在正确位置的情况已经在 中处理过了
if
,那么elif
就可以简单的检查一下单词中是否有这样的字母:第二个问题是变量的名称,因为这种可读性受到影响,并且不清楚在什么中检查了什么。例如,在一个地方站立
S[i] == Q[i]
,以及更远Q[i] != S[i]
。从技术上讲没有区别,但是当您尝试了解代码的作用时,就会感到困惑。安东,这是您为游戏“公牛和奶牛”更正的代码(很可能您可以用谷歌搜索一些更简单的东西,但我在“额头”上更正了您的代码,因为您问过它)-在您的示例中进行了测试。
所有更正都直接在代码中注释。
您有两个主要错误 - 不存在
("absent")
(您自己看到了这个),并且您没有标记已经使用的字母。另外,PEP-8 不建议对这些变量使用大写字母,但我没有碰这个,它不影响功能。