【问题标题】:Anagram Python 3 [closed]字谜Python 3 [关闭]
【发布时间】:2013-11-25 11:44:59
【问题描述】:

我正在尝试编写一个程序来检查 2 个输入是否是字谜。我觉得这应该相对容易,但我似乎无法弄清楚。我应该将一个函数定义为:

def isAnagram(s1, s2):

到目前为止,我有这个:

word1 = input("Enter a string: ")
word2 = input("Enter a second string: ")

def isAnagram(s1, s2):
    s1 = word1.sort()
    s2 = word2.sort()
    if s1 == s2:
       print("This is an anagram")
    else:
       print("This is not an anagram)
isAnagram()

我想我不完全理解定义函数,所以如果你能解释一下发生了什么,那就太好了!

【问题讨论】:

  • 1.我认为你需要谷歌 anagram 的定义。 2. 这是关于 python 中的 anagram 程序的第无数个问题,我相信你会找到足够多的提示。 3. SO 是针对特定问题的,而不是针对“修复我的代码”的问题。
  • 4.你从来没有接受过你的问题的任何答案。这让人们更不愿意回答。如果您找到了您正在寻找的内容,请接受答案和/或投票支持其他有用的答案。
  • @sashkello:他似乎能很好地理解字谜。他的算法是正确的,甚至是相当有效的。他只是不懂一些基本的 Python 知识。
  • @abarnert 是的,我现在明白了,一开始是误读了代码。不过,基本的搜索技巧会很有用,以下是我在 20 秒内找到的内容:stackoverflow.com/questions/14990725/…
  • 解决字谜的最基本思路是对两个字符串进行排序,而不是将它们等同起来。如果它们等于它的字谜,否则不等于。一个简单的python实现可以找到jee-appy.blogspot.com/2016/06/python-anagram-program.html

标签: python python-3.x anagram


【解决方案1】:

您几乎正确地定义了该函数,但存在一些问题。

首先,您要求s1s2 作为参数。那挺好的。现在使用这些值,而不是全局变量 word1word2

其次,如果这些值是字符串,则不能对它们调用sort,因为字符串没有sort 方法。但是你可以在 any 序列上调用sorted 函数,甚至是字符串。

第三,有一个简单的拼写错误,第二个print 缺少"

返回 True 或 False 值可能会更好,并将 print 放在函数之外,但我们暂时不要这样做。

综合起来,这是一个工作函数:

def isAnagram(s1, s2):
    s1 = sorted(s1)
    s2 = sorted(s2)
    if s1 == s2:
       print("This is an anagram")
    else:
       print("This is not an anagram")

但是现在,您也必须正确调用该函数。您已将函数定义为采用两个参数,s1s2。这意味着您需要使用两个参数调用该函数。

那么,你从哪里得到这些论点?好吧,您已经有了这些变量word1word2,它们看起来正是您想要的。

所以,把最后一行改成:

isAnagram(word1, word2)

你已经完成了。

【讨论】:

    【解决方案2】:

    您的想法是对的,但由于 word1word2 是字符串,它们没有 .sort() 属性。您仍然可以对该字符串中的字母进行排序:

    >>> w='hello'
    >>> sorted(w)
    ['e', 'h', 'l', 'l', 'o']
    

    sorted() 的结果是一个列表,我们可以把它转回一个字符串,我用一个空字符串加入它们:

    >>> ''.join(sorted(w))
    'ehllo'
    

    有了这些知识,您的程序可能看起来像:

    word1 = input("Enter a string: ")
    word2 = input("Enter a second string: ")
    
    def isAnagram(s1, s2):
        s1 = ''.join(sorted(word1))
        s2 = ''.join(sorted(word2))
        if s1 == s2:
           print("This is an anagram")
        else:
           print("This is not an anagram")
    
    isAnagram(word1, word2)
    

    【讨论】:

      【解决方案3】:

      您查找字谜的方法非常合理。对单词进行排序并比较它们是确定两个单词是否是彼此的字谜的最简单方法。

      但是,我认为您对函数参数的概念感到困惑。当你定义

      foo(x1, x2)
      

      foo被调用时,预计会被调用2个参数。你定义

      anagram(s1, s2)
      

      但从不提供 s1 和 s2。参数列表不是您在函数中使用的变量名称列表——您可以随意分配新变量。相反,它是函数采用的输入列表。

      所以,anagram() 不正确。您需要致电anagram(input1, input2)。 (假设你没有默认值,我不会进入。

      def isAnagram(s1, s2):
          sortedWord1 = sorted(s1) # s1 is word1! (sorted instead of sort, strings are immutable)
          #what should you do here?
          if sortedWord1 == sortedWord2:
             print("This is an anagram")
          else:
             print("This is not an anagram") # you forgot a closing quote!
      
      word1 = input("Enter a string: ")
      word2 = input("Enter a second string: ")
      
      isAnagram(word1, word2)
      

      我对您的代码进行了细微的更改,以便它应该做正确的事情。不过,我建议您在继续之前多阅读functions

      把它们想象成数学中的函数! f(x) 是有意义的,f 虽然仍然有意义,但可能不是您想要的。

      >>> isAnagram("anagram", "nagaram")
      This is an an anagram
      >>> isAnagram("anagram", "woohoo")
      This is not an anagram
      >>> isAnagram("a", "a")
      This is an an anagram
      

      【讨论】:

        猜你喜欢
        • 2011-10-01
        • 2021-07-30
        • 2011-11-02
        • 1970-01-01
        • 2012-10-11
        • 2013-12-07
        • 1970-01-01
        • 2021-02-28
        • 1970-01-01
        相关资源
        最近更新 更多