它来自 Educative.io"从头开始学习Python 3"的第一门考试:
检测字符串模式
在此编码练习中,系统会要求您编写名为 detect_pattern 的函数的主体,该函数根据两个字符串是否具有相同的字符模式返回 true 或 false。更准确地说,如果两个字符串的长度相同,并且第一个字符串中的两个字符相等,则当且仅当第二个字符串中相应位置的字符也相等时,它们具有相同的模式。
以下是一些相同模式和不同模式的示例:
1st String | 2nd String | |
---|---|---|
"> | True | |
"a"> | True | |
"y"> | True | |
"xy"> | True | |
"xyz"> | False | |
"xyz"> | False | |
"aaa"> | True | |
style="text-align: center;">"xyzxyz"> | "toetoe"> | >True |
style="text-align: center;">"xyzxyz"> | "toetoa"> | False |
style="text-align: center;">"aaabbbcccd"> | "eeefffgggz"> | >True |
style="text-align: center;">"cbacbacba"> | "xyzxyzxyz"> | >True |
style="text-align: center;">"abcdefghijk"> | "lmnopqrstuv"> | True |
style="text-align: center;">"asasasasas"> | "xxxxxyyy"> | False |
style="text-align: center;">"ascneencsa"> | "aeiouaeiou"> | >False |
style="text-align: center;">"aaasssiiii"> | "gggdddfffh"> | >False |
编辑:在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