【发布时间】:2013-12-25 22:22:02
【问题描述】:
我目前正在学习使用 Dive Into Python 3 书(以及其他)在 Python 中编程。下面是本书第 5 章中的示例,展示了使用列表函数来复数单词。
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)
问题在于,当我尝试在 IDLE 中执行代码时,对于“学生”(具有简单复数形式的最后规则的单词)之类的单词,我没有得到正确的结果。符合其余规则的单词没有问题。
这是我从解释器中得到的:
>>> import plural
>>> plural.plural('copy')
'copies'
>>> plural.plural('hoax')
'hoaxes'
>>> plural.plural('beach')
'beaches'
>>> plural.plural('student')
'student'
真正奇怪的是,当我从解释器调用 apply_default() 函数时,工作就完成了!
>>> plural.apply_default('student')
'students'
【问题讨论】:
-
您的来源中有错字:
match_y使用re.sub而不是re.search -
您确定在 IDLE 中运行的是最新版本的代码吗?我的猜测是您在更改后没有重新加载代码
标签: python function tuples return