2

我正在尝试编写一个程序来检查 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()

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

4

3 回答 3

4

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

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

其次,如果这些值是字符串,则不能调用sort它们,因为字符串没有sort方法。但是您可以在任何序列上调用该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")

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

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

因此,将最后一行更改为:

isAnagram(word1, word2)

你完成了。

于 2013-11-13T02:56:23.047 回答
1

你寻找字谜的方法是完全合理的。对单词进行排序并比较它们是找出两个单词是否是彼此的字谜的最简单方法。

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

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)

我非常轻微地更改了您的代码,以便它应该做正确的事情。不过,我建议您在继续之前多阅读一下函数。

把它们想象成数学中的函数!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
于 2013-11-13T02:55:41.710 回答
1

您的想法是正确的,但是由于word1andword2是字符串,因此它们没有该.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)
于 2013-11-13T02:55:50.867 回答