编写一个python函数check_anagram(),该函数接受两个字符串,如果一个字符串是另一个字符串的字谜,则返回True。否则返回False。
如果两个字符串包含重复字符,但没有一个字符在同一位置重复,则认为它们是一个字谜。字符串的长度应该相同。
注意:在适用的情况下执行不区分大小写的比较。
这是我的代码:
def check_anagram(data1,data2):
first = data1.lower()
second = data2.lower()
d1 = []
d2 = []
for i in range(0, len(first)):
d1.append(first[i])
for i in range(0, len(second)):
d2.append(second[i])
for_check1 = sorted(d1)
for_check2 = sorted(d2)
if (for_check1 != for_check2):
return False
count = 0
if (len(d1) == len(d2)):
for i in d1:
for j in d2:
if(i == j):
a = d1.index(i)
b = d2.index(j)
if(a == b):
return False
else:
count += 1
if(count == len(first)):
return True
else:
return False
print(check_anagram("Schoolmaster", "Theclassroom"))
我得到的输出是“ False”
尽管此程序为{silent,listen} {Moonstarrer,Astronomer} {apple,mango}之类的字符串值提供相关输出,但没有为上述两个字符串(在代码中)提供相关输出
此代码中缺少什么情况?该怎么纠正?
答案 0 :(得分:3)
您的功能可以简化为:
def check_anagram(data1, data2):
data1 = data1.lower()
data2 = data2.lower()
if sorted(data1) != sorted(data2):
return False
return all(data1[i] != data2[i] for i in range(len(data1)))
实际上适用于您指定的情况。
答案 1 :(得分:1)
你的代码是正确的,只是写 len(second) 而不是 count。
def check_anagram(data1,data2):
first = data1.lower()
second = data2.lower()
d1 = []
d2 = []
for i in range(0, len(first)):
d1.append(first[i])
for i in range(0, len(second)):
d2.append(second[i])
for_check1 = sorted(d1)
for_check2 = sorted(d2)
if (for_check1 != for_check2):
return False
count = 0
if (len(d1) == len(d2)):
for i in d1:
for j in d2:
if(i == j):
a = d1.index(i)
b = d2.index(j)
if(a == b):
return False
else:
count += 1
if(len(second) == len(first)):
return True
else:
return False
print(check_anagram("Schoolmaster", "Theclassroom"))