You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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)

代码说明

  1. zip(blanks, answers)把占位符和对应的答案配对,每次循环拿到一组(占位符, 答案)
  2. 每次调用replace()生成新的字符串(因为Python字符串是不可变的,必须重新赋值)
  3. question.lower()统一转小写,避免用户输入"easy"或"Easy"的判断问题
  4. 修正了原答案里的拼写错误AntarticaAntarctica

这样运行后,四个占位符都会被正确替换成对应的答案啦。

内容的提问来源于stack exchange,提问作者nicholas gwee

火山引擎 最新活动