互相检查字符串(Anagrams)

Kyl*_*yle 10 python anagram

分配是编写一个程序,接受来自用户的两组单词,然后如果两个是字谜(或者至少如果一个字母中的所有字母都出现在另一个中)则打印"真"语句,并且"假"声明,如果没有.

作为一个整体编程的新手,我不知道如何超越仅仅索引一个字符串并比较一个字符串的所有部分.我强调我是初学者; 我已经阅读了许多其他标有Python和Anagram的帖子,它们总是在我的脑海中并且参考我没有被教过的东西.所以越简单越好.到目前为止,这是我的非工作代码:

s1 = input("Please enter a word:")
s2 = input("Please enter another word:")

for i in range(0, len(s1), 1):
    if i in range (0, len(s2), 1):
        print("The letters in your first word are present in your second word.")
Run Code Online (Sandbox Code Playgroud)

Ble*_*der 38

为什么不对字符串进行排序?

>>> sorted('anagram')
['a', 'a', 'a', 'g', 'm', 'n', 'r']
>>> sorted('nagaram')
['a', 'a', 'a', 'g', 'm', 'n', 'r']
>>> sorted('anagram') == sorted('nagaram')
True
Run Code Online (Sandbox Code Playgroud)


lbo*_*gav 16

您可以使用魔法计数器收藏库.来自文档:

它是一个无序集合,其中元素存储为字典键,其计数存储为字典值

因此,您可以使用字符串(可迭代)初始化Counter对象,并与字符串中的另一个Counter进行比较

from collections import Counter

def is_anagram(str1, str2):
   return Counter(str1) == Counter(str2)
Run Code Online (Sandbox Code Playgroud)

  • 我比使用`sorted`更喜欢这个解决方案,因为它更清楚这里实际做了什么 (2认同)

Joh*_*yon 5

您需要更多地考虑条件逻辑.循环在正确的轨道上,但如果s1中有一个break不在s2中的字母,则应该退出此循环并打印"False"语句.考虑使用类似的变量all_s1_in_s2 = True,然后如果找到不匹配的字母,则将其设置为false.

其他一些提示:

  • for l in s1将遍历字符串S1让您访问的每个字母顺序l-你不需要rangelen根本

  • if .. in语句可以帮助测试字母中是否存在字母,例如if letter in mystring:是一个有效的语句,这可以帮助你很多,同样不需要rangelen

  • 应避免在变量名称中使用的数字在可能的情况-更好的将是word_oneword_two,作为一个例子