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

Python空字符串在非空字符串中返回True?含'di'单词计数代码解析

问题1:为什么Python中空字符串包含在非空字符串时返回True?
  • 这是因为从字符串子串的数学定义来说,空字符串''是所有字符串的子串。你可以把任意字符串s拆成'' + s + '',所以空字符串自然存在于任何字符串的开头、结尾,或是任意两个字符之间的空位置。
  • 这种设计也保证了字符串操作的一致性:比如调用s.find('')会返回0,s.split('')能把每个字符单独拆分,这些操作都依赖于空字符串是任何字符串的子串这一规则。
问题2:代码执行逻辑解析

这段代码的目标是统计文本中包含大小写不敏感的"di"子串的单词数量(单词以空格或.作为分隔符)。

变量初始化

  • texto = 'imagina.':待处理的输入文本(注:按代码逻辑,该文本不含"di"子串,执行结果应为0;若要得到结果1,输入需为包含"di"的单词,比如'diamina.')
  • cl = 0:统计当前单词的字符数(代码中未实际使用该变量,不影响核心逻辑)
  • flag_di = False:标记当前遍历的单词是否包含"di"子串
  • answer = 0:最终统计的符合条件的单词总数
  • previous = '':记录上一个遍历到的字符,用于判断是否出现"di"组合

循环遍历字符的执行流程(以输入'diamina.'为例,结果为1)

  1. 第一个字符'd':

    • 不是空格或.,进入第一个分支,cl自增为1
    • 当前字符是'd',不满足car in 'iI' and previous in 'dD'(previous为空),flag_di保持False
    • 更新previous为'd'
  2. 第二个字符'i':

    • 不是空格或.,cl自增为2
    • 当前字符是'i',previous是'd',满足判断条件,将flag_di设为True
    • 更新previous为'i'
  3. 后续字符'a'、'm'、'i'、'n'、'a':

    • 都不是空格或.,cl持续自增,但都不触发"di"的判断,flag_di保持True
    • 每次更新previous为当前字符
  4. 最后一个字符'.':

    • 属于分隔符,进入else分支
    • 此时flag_di为True,answer自增为1
    • 重置cl、flag_di、previous为初始值

最终输出

循环结束后,print(answer)输出1,符合预期。

补充说明

如果输入是用户描述的'imagina.',由于该单词里没有"di"子串,遍历到.时flag_di还是False,最终输出会是0,和用户说的结果1不符,推测是输入文本存在笔误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 22:43:18