如何检查第二个字符串中相应位置的字符是否在与第一个字符串相同的位置重复?教育考试



它来自 Educative.io"从头开始学习Python 3"的第一门考试:

检测字符串模式

在此编码练习中,系统会要求您编写名为 detect_pattern 的函数的主体,该函数根据两个字符串是否具有相同的字符模式返回 true 或 false。更准确地说,如果两个字符串的长度相同,并且第一个字符串中的两个字符相等,则当且仅当第二个字符串中相应位置的字符也相等时,它们具有相同的模式。

以下是一些相同模式和不同模式的示例:

相同的模式style="文本对齐:居中;">">style="文本对齐:居中;">"a">style="文本对齐:居中;">"x">style="文本对齐:居中;">"ab">style="text-align: center;">"aba">style="text-align: center;">"- - -">style="文本对齐:居中;">"- - -">style="text-align: center;">"xyzxyz">>Truestyle="text-align: center;">"xyzxyz">Falsestyle="text-align: center;">"aaabbbcccd">>Truestyle="text-align: center;">"cbacbacba">>Truestyle="text-align: center;">"abcdefghijk">Truestyle="text-align: center;">"asasasasas">Falsestyle="text-align: center;">"ascneencsa">>Falsestyle="text-align: center;">"aaasssiiii">>False
1st String 2nd String
"> True
"a">True
"y">True
"xy">True
"xyz">False
"xyz">False
"aaa">True
"toetoe">
"toetoa">
"eeefffgggz">
"xyzxyzxyz">
"lmnopqrstuv">
"xxxxxyyy">
"aeiouaeiou">
"gggdddfffh">

编辑:在if语句的条件中存在一些问题,但现在应该解决这个问题。

这种方法应该行得通。我对循环中的变量命名不是很满意,因此请随时更改它们。我用你提供的所有例子进行了尝试,所以在语义上它应该是正确的。

def detect_pattern(s1: str, s2: str) -> bool:
if len(s1) != len(s2):
return False
for idx, (let_1, let_2) in enumerate(zip(s1, s2)):
for let_1_inner, let_2_inner in zip(s1[idx:], s2[idx:]):
if (let_1_inner == let_1) != (let_2_inner == let_2):
return False
return True

目前我在 educative.io 做这门课程。起初,当我阅读这个问题时,我不明白如何准确地做这个程序。

在上面的解决方案中,@benjamin,他使用了zip()和enumerate()等函数。本课程尚未教授这两个函数和数据结构。因此,不建议采用上述解决方案。

我编写了一个没有这两个函数的程序,它取得了成功。

def detect_pattern(s1, s2):
if len(s1) != len(s2):
return False
for i in range (len (s1)):
let_1 = s1 [i]
let_2 = s2 [i]
for j in range ( i, len (s1)):
let_1_inner = s1 [j]
let_2_inner = s2 [j]
if (let_1_inner == let_1) != (let_2_inner == let_2):
return False
return True

最新更新