一道简单字符串匹配的题,不过这是我最近花时间最多的一道题了。原因是之前看了一下python的正则表达式,想说只用正则表达式来做。但是废了半天劲也没写出很满意的答案。 看了看其他人的答案,感觉1)还是直接使用isupper()比较简单, 2)把单个匹配条件拆分出来再来做组合。 原版: import re RESPONSES = { "^[\s]*$":"Fine. Be that way!", "^[A-Z]+\?$": "Calm down, I know what I'm doing!", "^[A-Z]+$": "Whoa, chill out!", "^.*\?$": "Sure.", ".*": "Whatever." } def response(hey_bob): msg = "".join([c for c in hey_bob if c.isalpha() or c =='?']) if not msg and hey_bob.strip(): return "Whatever." for pattern in RESPONSES: if re.search(pattern, msg.strip()): return RESPONSES[pattern] 改进版 import re def is_question(msg): return msg.strip()[-1] == '?' def is_empty(msg): return len(msg.strip()) == 0 def is_shouting(msg): return msg.isupper() RESPONSES = { (is_empty,) :"...