我目前正在学习用Python编写程序,使用Python3的书(以及其他书)。下面是本书第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)问题是,当我试图在空闲中执行代码时,我无法得到像“学生”这样的单词(简单复数形式的单词--最后一条规则)的正确结果。其他规则下的词汇没有问题。
下面是我从翻译那里得到的信息:
>>> 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'发布于 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匹配的子字符串。
https://stackoverflow.com/questions/20459944
复制相似问题