确定一个单词是否是等值线图

时间:2017-05-25 10:02:32

标签: python

我编写了一个python代码,用于检查单词是否为isogram。如果它是等值线图,它应该返回('字',True),但如果它不是等值线图,它应该返回('字',False)。但每当我通过一个像天堂般的论点时,我得到(' heavenlly',True)而不是(' heavenlly',False)。请我非常感谢你的帮助

这是我的代码:

def isogram(aWord):
    if aWord == '':
        return (aWord, False)
    elif type(aWord) != str:
        raise TypeError('Argument should be a string')
    else:
        for letter in aWord:
            if aWord.count(letter) > 1:
                return (aWord, False)
            else:
                return (aWord, True)

3 个答案:

答案 0 :(得分:4)

您的代码仅检查第一个字母(在示例中为“h”)然后已经返回。您应该只在运行整个for循环后返回:

def isogram(aWord):
    if aWord == '':
        return (aWord, False)
    elif type(aWord) != str:
        raise TypeError('Argument should be a string')
    else:
        for letter in aWord:
            if aWord.count(letter) > 1:
                return (aWord, False)
        return (aWord, True)

答案 1 :(得分:3)

请参阅xjcl的答案,了解修复代码的方法。

如果您对isogram的定义是没有任何字母可能出现多次,您可以发出

len(set(word)) == len(word)

如果您对isogram的定义是所有字母出现的次数相等,那么使用Counter模块中的collections对象就可以完成这项工作。

>>> len(set(Counter('aabbcc').values())) == 1
True
>>> len(set(Counter('aabbcca').values())) == 1
False

这个快速上线的缺点是即使无法再满足等值线的定义,Counter也会继续计算(它会查看所有字符)。

答案 2 :(得分:0)

def is_isogram(word):
    if len(set(word.lower())) == len(word.lower()):
        return True
    else:
        return False

您必须确保正在考虑大写和小写!