首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Anagram Python 3

Anagram Python 3
EN

Stack Overflow用户
提问于 2013-11-13 10:39:50
回答 3查看 10.8K关注 0票数 2

我正在试着写一个程序来检查2个输入是否是字谜。我觉得这应该是相对容易的,但我似乎不能弄明白。我应该这样定义一个函数:

代码语言:javascript
复制
def isAnagram(s1, s2):

到目前为止,我有这样的想法:

代码语言:javascript
复制
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()

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-13 10:56:23

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

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

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

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

返回一个True或False值,并将print放在函数之外可能会更好,但我们暂时不考虑这一点。

把这些放在一起,下面是一个工作函数:

代码语言:javascript
复制
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,它们看起来就是你想要的。

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

代码语言:javascript
复制
isAnagram(word1, word2)

你就完事了。

票数 4
EN

Stack Overflow用户

发布于 2013-11-13 10:55:42

你寻找字谜的方法是完全合理的。对单词进行排序和比较是确定两个单词是否是另一个单词的字形变化的最简单方法。

然而,我认为你被函数参数的概念搞糊涂了。当您定义

代码语言:javascript
复制
foo(x1, x2)

当调用foo时,预计会使用2个参数进行调用。你定义

代码语言:javascript
复制
anagram(s1, s2)

但是永远不要为它提供s1和s2。参数列表不是您在函数中使用的变量名列表--您可以随意分配新的变量。相反,它是函数接受的输入列表。

因此,anagram()是不正确的。你需要给anagram(input1, input2)打电话。(假设您没有默认值,我将不再赘述。

代码语言:javascript
复制
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虽然仍然有意义,但可能不是你想要的。

代码语言:javascript
复制
>>> isAnagram("anagram", "nagaram")
This is an an anagram
>>> isAnagram("anagram", "woohoo")
This is not an anagram
>>> isAnagram("a", "a")
This is an an anagram
票数 1
EN

Stack Overflow用户

发布于 2013-11-13 10:55:51

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

代码语言:javascript
复制
>>> w='hello'
>>> sorted(w)
['e', 'h', 'l', 'l', 'o']

sorted()的结果是一个列表,我们可以将它转换回一个字符串,然后使用一个空字符串将它们连接起来:

代码语言:javascript
复制
>>> ''.join(sorted(w))
'ehllo'

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

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19944214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档