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
相关产品推荐
相关产品推荐

