首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python: return语句的问题

Python: return语句的问题
EN

Stack Overflow用户
提问于 2013-12-08 22:23:33
回答 1查看 97关注 0票数 2

我目前正在学习用Python编写程序,使用Python3的书(以及其他书)。下面是本书第5章的例子,展示了如何使用列表功能来实现单词的多元化。

代码语言:javascript
复制
import re

def match_sxz(noun):
    return re.search('[sxz]$', noun)

def apply_sxz(noun):
    return re.sub('$', 'es', noun)

def match_h(noun):
    return re.search('[^aeioudgkprt]h$', noun)

def apply_h(noun):
    return re.sub('$', 'es', noun)

def match_y(noun):
    return re.sub('y$', 'ies', noun)

def apply_y(noun):
    return re.sub('y$', 'ies', noun)

def match_default(noun):
    return True

def apply_default(noun):
    return noun + 's'

rules = ((match_sxz, apply_sxz),
         (match_h, apply_h),
         (match_y, apply_y),
         (match_default, apply_default)
         )

def plural(noun):
        for (matches_rule, apply_rule) in rules:
            if matches_rule(noun):
                return apply_rule(noun)

问题是,当我试图在空闲中执行代码时,我无法得到像“学生”这样的单词(简单复数形式的单词--最后一条规则)的正确结果。其他规则下的词汇没有问题。

下面是我从翻译那里得到的信息:

代码语言:javascript
复制
>>> import plural
>>> plural.plural('copy')
'copies'
>>> plural.plural('hoax')
'hoaxes'
>>> plural.plural('beach')
'beaches'
>>> plural.plural('student')
'student'

真正奇怪的是,当我从解释器调用apply_default()函数时,任务就完成了!

代码语言:javascript
复制
>>> plural.apply_default('student')
'students'
EN

回答 1

Stack Overflow用户

发布于 2013-12-08 22:29:09

在您的代码中,match_y将始终计算为True。另外,看看re.sub的文档:

re.sub(pattern, repl, string, count=0, flags=0) 返回通过替换替换字符串中最左边的不重叠模式出现的字符串所获得的字符串。 瑞尔。如果找不到模式,则字符串将不受影响地返回。repl可以是字符串或函数;如果是字符串,则会处理其中的任何反斜杠转义。也就是说,\n转换为单个换行符,\r转换为回车,依此类推。诸如\j这样的未知的逃逸事件将被单独处理。反向引用(如\6 )在模式中被替换为由组6匹配的子字符串。

来源:http://docs.python.org/2/library/re.html

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

https://stackoverflow.com/questions/20459944

复制
相关文章

相似问题

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