You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

《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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 17:18:18