python中的字谜(列表)

时间:2016-04-06 17:39:46

标签: python list

我必须编写一个程序,它需要2个单词并检查并查看它们是否是字谜。

与其他帖子类似,我无法弄清楚要做到这一点。代码中只有一些小问题。

到目前为止我的代码:

s1 = input("Enter in first word:")
s2 = input("Enter in second word:")

def isAnagram(s1, s2):
    s1 = s1
    s2 = s2
    for i in range[0, len(s1),1]:
        if i in range [0, len(s2), 1]:
            print("Is in anagram!")
        else:
            print("Is not anagram!")

isAnagram()

我无法弄清楚如何完成它以及为什么它一直说isAnagram缺少2个必需的位置参数。

2 个答案:

答案 0 :(得分:0)

您需要计算每个单词的每个字母是否具有相同的次数。简单地迭代可能需要在字符串上进行几次传递。通过按字母顺序对它们进行排序,您可以轻松检查它们是否是图表。

def is_anagram(s1, s2):
    return sorted(s1) == sorted(s2)

实施例

>>> is_anagram('snake', 'kanes')
True

但是,这是区分大小写的,因为它认为S与s不同。

>>> is_anagram('Snake', 'Kanes')
False

如果您希望后一种情况返回True,则只需将所有字母转换为大写或小写,即return sorted(s1.lower()) == sorted(s2.lower())

答案 1 :(得分:0)

这就是Counter的目的。

from collections import Counter

def is_anagram(s1,s2):
    return Counter(s1) == Counter(s2)

Counter返回一个字典,其中包含每个唯一元素的出现频率。

Counter("hiHh")
> Counter({'h': 2, 'i': 1, 'H': 1})
Counter("hih") == Counter("hhi")
> True

重新实施计数器

这是如何创建与Counter非常相似的内容(如果出于某些奇怪的原因,您无法直接使用它):

def Counter(string):
    return {character: string.count(character) for character in set(string)}

其他警告

如果您需要不区分大小写的内容,请在string.lower()之前执行Counter