我目前正在學習使用Dive Into Python 3書籍(以及其他)編程Python。下面是本書第5章中的例子,展示了使用列表函數以便將詞語多元化。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('[^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' – Keeper
您確定您正在IDLE中運行最新版本的代碼嗎?我的猜測是,在更改之後,您沒有重新加載代碼 – shx2