我编写了一个python代码来检查一个单词是否是一个等价图。如果它是一个等值线,它应该返回('word',True),但是如果它不是等值线,它应该返回('word',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)发布于 2017-05-25 10:06:40
您的代码只检查第一个字母(在示例“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)发布于 2017-05-25 10:09:19
有关修复代码的方法,请参见xjcl的答案。
如果您对等值图的定义是,任何字母都不可能出现超过一次,您可以只发出一次。
len(set(word)) == len(word)如果您对等价图的定义是所有字母显示的次数相等,那么使用来自collections模块的一个collections对象就可以完成这项工作。
>>> len(set(Counter('aabbcc').values())) == 1
True
>>> len(set(Counter('aabbcca').values())) == 1
False这种快速的单线器的缺点是,即使不能完成等价图的定义(它查看所有的字符),Counter仍然在计数。
发布于 2020-07-15 08:09:20
def is_isogram(word):
if len(set(word.lower())) == len(word.lower()):
return True
else:
return False你得确保上、下两个案子都被考虑了!
https://stackoverflow.com/questions/44177677
复制相似问题