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

Python如何提取(^和^)之间的子串实现madlib填词游戏功能

MadLib填词游戏代码问题分析

你的代码遗漏了以下核心逻辑:

  • 没有循环遍历所有占位符:find()方法只会匹配第一个出现的(^和^),模板存在多个占位符时,只会处理第一个就终止运行,无法覆盖所有待填词位置。
  • 替换逻辑错误:你仅替换了占位符中间的标识文本,替换完成后(^和^)的包裹符号会保留,不符合输出要求;同时直接使用replace()做全局替换时,若模板存在多个相同的占位符标识,会一次性替换所有内容,无法支持用户为相同标识输入不同内容的需求。
  • 状态未更新:你每次处理都基于最原始的输入模板madlib,单次替换后的结果没有作为后续处理的基础文本,即使加了循环也无法持续处理剩余占位符。
  • 边界情况未处理:当输入模板不存在占位符时,函数内的if分支不会执行,mad变量未定义就返回,会直接抛出命名错误。
  • 变量命名冲突:函数内定义的临时变量mad和函数名重名,会导致后续无法正常调用函数。
修正后可运行的参考代码
# 读取模板文本
template = input("输入MadLib模板(占位符格式为(^标识^)):")
a = "(^"
b = "^)"
current_text = template

# 循环处理所有占位符
while a in current_text:
    # 定位当前第一个占位符的起止位置
    start_idx = current_text.find(a)
    end_idx = current_text.find(b, start_idx) + len(b)
    # 提取占位符标识(去掉包裹符号)
    placeholder = current_text[start_idx + len(a) : end_idx - len(b)]
    # 读取用户输入
    input_word = input(f"请输入{placeholder}:")
    # 替换整个占位符结构,更新当前文本,每次仅替换1个匹配项
    current_text = current_text.replace(current_text[start_idx:end_idx], input_word, 1)

# 输出最终结果
print("\n生成结果:")
print(current_text)

内容的提问来源于stack exchange,提问作者wannabe coder

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 19:54:00