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

Python仅改首行expression赋值 判断字符串第二位是否为'o'

问题场景

给定初始代码如下,约束为仅可修改第一行expression的赋值语句,需要在expression内实现逻辑:判断传入的test字符串的第二个字符是否为'o',最终将判断结果输出到控制台。

expression = "test[1]"

var1 = "{%s}" % expression
str1 = f"{var1}"
print(str1.format(test="world"))

已尝试的三种赋值写法均运行失败:

expression = "test[1]=='o'"
expression = "(test[1]=='o')"
expression = "1 if test[1]=='o' else 0"
失败原因

str.format()的占位符不是完整的Python代码执行环境,仅支持非常有限的语法规则:

  • 识别传入的位置/关键字参数名
  • 支持属性访问(.属性名)、下标索引访问([索引值])
  • 支持带字面量参数的方法调用
    它不支持==这类二元运算符,也不支持if/else这类流程控制关键字,因此之前写的比较运算、三元表达式都会直接触发占位符解析错误。
可行实现

直接将第一行expression赋值为以下内容即可:

expression = "test.startswith('o',1,2)"

实现原理

  • 字符串内置方法startswith(prefix, start, end)的作用是:判断字符串在[start, end)索引区间内的片段,是否以prefix开头
  • 这里指定start=1、end=2,区间刚好覆盖索引为1的单个字符(Python下标从0开始,正好对应字符串的第二个字符),直接判断该位置字符是否为'o',返回值为原生布尔值True/False
  • 方法调用属于str.format()占位符支持的语法范围,参数中的字符串字面量'o'、数字字面量1/2都可以被正常解析
    运行修改后的代码,测试用例中test="world"的第二个字符为'o',控制台会直接输出True;如果传入的字符串第二个字符不是'o',则输出False,完全满足判断需求。

如果需要输出数字形式的1/0代替布尔值,可以替换为如下写法:

expression = "test.count('o',1,2)"

该写法会统计索引1位置'o'的出现次数,匹配时返回1,不匹配返回0。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 10:03:21