【问题标题】:Creating an anagram checker创建一个字谜检查器
【发布时间】:2019-04-16 12:12:20
【问题描述】:

所以我已经能够创建以下程序来比较两个字符串以查看它们是否是彼此的字谜。

def anagrams( string1, string2 ):
    if sorted(string1.lower()) == sorted(string2.lower()):
        return True
    else:
        return False

但是,我的问题是,如果两个输入字符串完全相同,我不希望返回 True 值。例如:

anagrams('silent','silent')

这输出 True 但我不希望它那样做,我应该做些什么改变来实现它?

【问题讨论】:

    标签: python function if-statement conditional-statements anagram


    【解决方案1】:

    只需检查字符串是否不同:

    def anagrams(string1, string2):
        if sorted(string1.lower()) == sorted(string2.lower()) and string1.lower() != string2.lower():
            return True
        else:
            return False
    
    result = anagrams('silent', 'silent')
    print(result)
    

    输出

    False
    

    您可以使用 Counter 代替 sorted:

    from collections import Counter
    
    
    def anagrams(string1, string2):
        if string1.lower() != string2.lower() and Counter(string1.lower()) == Counter(string2.lower()):
            return True
        else:
            return False
    
    print(anagrams('silent', 'silent'))
    print(anagrams('silent', 'sitlen'))
    

    输出

    False
    True
    

    更新

    按照@RoadRunner 的建议,您可以这样做:

    from collections import Counter
    
    
    def anagrams(string1, string2):
        ls1, ls2 = string1.lower(), string2.lower()
        return ls1 != ls2 and Counter(ls1) == Counter(ls2)
    
    print(anagrams('silent', 'silent'))
    print(anagrams('silent', 'sitlen'))
    

    【讨论】:

    • 我从来没用过计数器,那是做什么用的?
    • 它创建了一个字典,其中键是元素,值是频率。
    • +1 以获得简短而有用的答案,但我认为您应该检查string1.lower() != string2.lower(),因为“沉默”和“沉默”不应该真正通过
    • @frustration 在到期时给予信任并接受此答案。
    • 您也可以只使用return string1 != string2 and Counter(string1) == Counter(string2)。不需要 if/else。
    【解决方案2】:
    def anagrams( string1, string2 ):
      if sorted(string1.lower()) == sorted(string2.lower()) and string1.lower() != string2.lower():
        return True
      else:
        return False
    
    print(anagrams('silent','silent'))
    

    【讨论】:

      猜你喜欢
      • 2023-03-09
      • 2018-03-22
      • 2016-06-14
      • 2019-07-27
      • 2016-02-01
      • 2013-12-07
      • 1970-01-01
      • 2017-10-21
      • 2017-12-02
      相关资源
      最近更新 更多