编写一个接受两个字符串并在python 3中返回True的函数

时间:2019-03-17 14:12:17

标签: python

编写一个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}之类的字符串值提供相关输出,但没有为上述两个字符串(在代码中)提供相关输出

此代码中缺少什么情况?该怎么纠正?

2 个答案:

答案 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"))