Python:返回语句的问题
我目前正在学习使用《深入Python 3》一书(以及其他书)进行Python编程。下面是本书第五章的示例,演示了如何使用列表函数来实现单词的多元化Python:返回语句的问题,python,function,tuples,return,Python,Function,Tuples,Return,我目前正在学习使用《深入Python 3》一书(以及其他书)进行Python编程。下面是本书第五章的示例,演示了如何使用列表函数来实现单词的多元化 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('[^aeioud
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)
问题是,当我试图在空闲状态下执行代码时,对于“student”(具有简单复数形式的单词)之类的单词,我没有得到正确的结果。遵守rest规则的单词没有问题
以下是我从口译员那里得到的信息:
>>> 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
将始终计算为True。另外,请查看re.sub的文档:
re.sub(模式、应答、字符串、计数=0、标志=0)
答复。如果找不到模式,则返回的字符串将保持不变。答复
可以是字符串或函数;如果是字符串,则任何反斜杠
它中的逃逸被处理。即,\n被转换为单个
换行符\r转换为回车符,依此类推。
诸如\j之类的未知转义被单独保留。反向引用,例如\6,
替换为模式中第6组匹配的子字符串
资料来源:
您的
匹配功能错误:
def match_y(noun):
# return re.sub('y$', 'ies', noun) # NO!
return re.search('y$', noun)
它将始终返回一个非空字符串,当作为布尔值进行测试时,该字符串将计为True
;因此,您应用了apply_y
规则,该规则没有任何作用,因为您的单词上没有-y,并返回了结果(即原始单词)。源代码中有一个输入错误:match_y
使用re.sub
而不是re.search
您确定正在空闲运行最新版本的代码吗?我的猜测是,在确定更改后,您没有重新加载代码。神清气爽的眼睛总是有帮助的。谢谢
def match_y(noun):
# return re.sub('y$', 'ies', noun) # NO!
return re.search('y$', noun)