我必须编写一个程序,它需要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个必需的位置参数。
答案 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
。