我编写了一个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)
答案 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
您必须确保正在考虑大写和小写!