【问题标题】:Python Anagrams in empty list [closed]空列表中的 Python Anagrams [关闭]
【发布时间】:2012-04-02 12:53:41
【问题描述】:

问题:编写一个程序,初始化一个空列表,然后提示用户输入单个单词并不断提示输入单个单词,将每个单词添加到列表中,直到用户输入单个句点字符'。'然后打印所有单词对,它们是字谜。比较应该不区分大小写。 - 可以简单地使用字典,但不是必需的。可以根据需要定义函数。

我已经尝试了以下代码的多个版本,但我似乎无法弄清楚我做错了什么。有人可以帮我指出正确的方向/给我一个类似的示例代码吗?我只是卡住了。

def areAnagrams(inputList):
    """Return inputList if words are anagrams, False otherwise"""
    inputList = sorted(inputList.lower())
    return inputList

inputList = raw_input ("Enter a word period to end: ") 
list = []
while inputList != '.':
    anagram = inputList
    list.append(anagram)
    inputList = raw_input("Enter a word (period to end): ")


print "Anagrams:", areAnagrams(inputList)

【问题讨论】:

  • 您实际上还没有实现任何可以找到字谜的代码。您的所有areAnagrams 方法所做的只是返回排序的输入列表。你期待有人为你做作业吗?
  • 你为什么要对列表进行排序?
  • 可能是错误的变量命名...在这里,您将数据附加到名为“list”的变量中,并在名为“inputList”的变量上调用函数,此时此变量始终包含' .'.
  • 不,我什么都不期待。刚刚迷失在这个特殊的问题中。我根据课堂上的字谜(输入两个单词而不是排序)的示例问题创建了这个。想知道我是否已经接近正确的轨道,而我没有。
  • "然后打印所有成对的字谜。"第一个提示:如果您希望您的函数 areAnagrams 能够告诉您一对单词是否是字谜,那么您在调用它时必须给它两个单独的单词。

标签: python dictionary anagram


【解决方案1】:

只关注检查两个单词是否是字谜的部分,你的函数需要检查两个单词是否长度相同,是否包含所有相同的字母。所以你可以这样做:

def areAnagrams(word1, word2):
    if len(word1) == len(word2):
        word1Letters = sorted(list(word1))
        word2Letters = sorted(list(word2))
        if word1Letters == word2Letters:
            return True
        else:
            return False
    else: 
        return False

【讨论】:

  • 这段代码比它应该的要复杂得多,只需执行def areAnagrams(w1, w2): return sorted(list(w1)) == sorted(list(w2))
  • @Doboy 是的,你可能是对的。更简单的版本只会在边缘情况下失败,其中一个单词包含一个在字母表中比所有其他单词晚的额外字母(例如'rap','prat'),并且假设长度约束适用。
猜你喜欢
  • 2020-07-19
  • 2015-01-13
  • 1970-01-01
  • 2013-12-12
  • 2013-06-10
  • 1970-01-01
  • 1970-01-01
  • 2020-07-02
  • 1970-01-01
相关资源
最近更新 更多