《Python编程:让繁琐工作自动化》第8章Mad Libs程序报错求助
解决Mad Libs程序中的替换错误
错误原因
你调用REGEX.sub()时参数顺序完全错误:编译后的正则对象的sub方法签名是regex.sub(替换内容, 待处理字符串, 替换次数),你把要替换的目标字符串i放在了第一个参数(应为替换内容的位置),把替换内容replaceItem放在了第二个参数(应为待处理字符串的位置),又把原始文本textContent放在了第三个参数(需要整数的替换次数位置),这直接导致了'str' object cannot be interpreted as an integer的错误。
另外,你的循环逻辑存在问题:每次循环都基于原始的textContent进行替换,之前的替换结果不会被保留,最终只会得到最后一次替换的内容。
修正后的代码
import re # 使用with语句自动管理文件,无需手动close with open('C:\\Users\\Cris\\madLibStory.txt', 'r') as textFile: textContent = textFile.read() # 正则匹配所有需要替换的关键词,补充练习要求的ADVERB REGEX = re.compile(r'(ADJECTIVE|NOUN|ADVERB|VERB)') # 定义回调函数,逐个处理匹配到的关键词 def replace_keyword(match): target_word = match.group() return input(f'Insert substitute for {target_word}: ') # 执行替换 newText = REGEX.sub(replace_keyword, textContent) print(newText) # 写入结果文件 with open('C:\\Users\\Cris\\madLibStoryLIBED.txt', 'w') as output_file: output_file.write(newText)
关键修正点
- 改用
re.sub()的回调函数方式,一次性处理所有匹配项,避免参数顺序错误和结果覆盖问题 - 使用
with语句管理文件操作,自动释放资源,代码更安全简洁 - 正则表达式补充了练习要求的
ADVERB关键词 - 用f-string替代旧的
%格式化语法,代码可读性更强
内容的提问来源于stack exchange,提问作者Cristher Rubio
相关产品推荐
相关产品推荐

