首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >确定一个单词是否是等值线。

确定一个单词是否是等值线。
EN

Stack Overflow用户
提问于 2017-05-25 10:02:32
回答 3查看 746关注 0票数 2

我编写了一个python代码来检查一个单词是否是一个等价图。如果它是一个等值线,它应该返回('word',True),但是如果它不是等值线,它应该返回('word',False)。但每当我通过像‘天堂’这样的争论时,我就得到(‘天堂’,真)而不是(‘天堂’,假)。我真的很感激你的帮助

这是我的代码:

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

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-05-25 10:06:40

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

代码语言:javascript
复制
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)
票数 4
EN

Stack Overflow用户

发布于 2017-05-25 10:09:19

有关修复代码的方法,请参见xjcl的答案。

如果您对等值图的定义是,任何字母都不可能出现超过一次,您可以只发出一次。

代码语言:javascript
复制
len(set(word)) == len(word)

如果您对等价图的定义是所有字母显示的次数相等,那么使用来自collections模块的一个collections对象就可以完成这项工作。

代码语言:javascript
复制
>>> len(set(Counter('aabbcc').values())) == 1
True
>>> len(set(Counter('aabbcca').values())) == 1
False

这种快速的单线器的缺点是,即使不能完成等价图的定义(它查看所有的字符),Counter仍然在计数。

票数 3
EN

Stack Overflow用户

发布于 2020-07-15 08:09:20

代码语言:javascript
复制
def is_isogram(word):
    if len(set(word.lower())) == len(word.lower()):
        return True
    else:
        return False

你得确保上、下两个案子都被考虑了!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44177677

复制
相关文章

相似问题

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