Python字符串替换问题:如何循环替换所有占位符为对应答案
解决Python多占位符替换的问题
看起来你当前的循环逻辑没找准占位符的匹配方式,而且只处理了第一个占位符的情况,所以才会只替换成功第一个。咱们来一步步修正:
问题根源
原代码里把quiz字符串拆成单词后,去判断quizwords == "1",但你的占位符是___1___这种完整的字符串,根本匹配不上;而且循环里只处理了"1"的情况,完全没涉及___2___到___4___的替换逻辑,自然只完成第一个。
简化的解决方案
其实不用拆分字符串这么麻烦,直接把占位符列表blanks和答案列表easyAnswer一一配对,逐个替换就行。字符串的replace()方法会帮你找到所有匹配的占位符(这里每个占位符都是唯一的,所以不用担心替换错)。
修改后的完整代码示例
# 先定义你用到的difficulty和answerList函数(如果还没定义的话) def difficulty(level): if level.lower() == "easy": return "There are ___1___ countries in the world. The countries with the biggest landmass is ___2___. The coldest continent in the world is ___3___. ___4___ is the capital of China" # 其他难度的逻辑可以在这里补充 def answerList(level): if level.lower() == "easy": # 注意:原拼写Antartica是错的,正确是Antarctica return ["195","Russia","Antarctica","Beijing"] # 其他难度的答案补充 # 主逻辑 question = raw_input("Shall we start? Easy, Medium, Hard?") if question.lower() == "easy": quiz_text = difficulty(question) answers = answerList(question) blanks = ["___1___","___2___","___3___","___4___"] # 核心循环:逐个替换占位符 for blank, answer in zip(blanks, answers): quiz_text = quiz_text.replace(blank, answer) # 输出替换后的结果 print(quiz_text)
代码说明
- 用
zip(blanks, answers)把占位符和对应的答案配对,每次循环拿到一组(占位符, 答案) - 每次调用
replace()生成新的字符串(因为Python字符串是不可变的,必须重新赋值) - 用
question.lower()统一转小写,避免用户输入"easy"或"Easy"的判断问题 - 修正了原答案里的拼写错误
Antartica→Antarctica
这样运行后,四个占位符都会被正确替换成对应的答案啦。
内容的提问来源于stack exchange,提问作者nicholas gwee




