標籤:
import redef 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.search(‘[^aeiou]y$‘,noun)def apply_y(noun): return re.sub(‘y$‘,‘ies‘,noun)def match_default(noun): return Truedef apply_default(noun): return re.sub(‘$‘,‘s‘,noun)rules = ((match_sxz, apply_sxz), (match_h, apply_h), (match_y, apply_y), (match_default, apply_default) )def plural(noun): for match_rule, apply_rule in rules: if(match_rule(noun)): return apply_rule(noun)print(plural(‘body‘));
改成動態建立函數的方式
import redef build_match_apply_function(pattern, search, replace): def match_rule(word): return re.search(pattern, word) def apply_rule(word): return re.sub(search, replace, word) return (match_rule, apply_rule)patterns = ( (‘[sxz]$‘,‘$‘,‘es‘), (‘[^aeioudgkprt]h$‘,‘$‘,‘es‘), (‘(qu|[^aeiou]y$)‘,‘y$‘,‘ies‘), (‘$‘,‘$‘,‘s‘), )rules = [build_match_apply_function(pattern, search, replace) for (pattern, search, replace) in patterns]def plural(noun): for match_rule, apply_rule in rules: if(match_rule(noun)): return apply_rule(noun)print(plural(‘body‘));
【Python學習日記】函數列表