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

Python中仅打印指定字母开头单词的代码错误排查

问题分析与解决

问题描述

给定字符串 st = 'Print only the words that start with s in this sentence',要求仅打印其中以s开头的单词,预期输出为start、s、sentence。

初始错误代码及问题

最初编写的代码如下:

space = ' '
before = space
indexCount = 0
for letter in st:
    if before == space and (letter == 's' or letter == 'S'):
        print(st[indexCount:st[indexCount:].find(' ')])
    before = letter
    indexCount += 1

输出仅显示两行空行和sentenc,无法正确打印start和s,核心问题有两点:

  1. 索引偏移错误:st[indexCount:].find(' ')返回的是子串内空格的位置,直接作为切片结束索引时,相当于从indexCount开始截取到原字符串的该位置(远小于indexCount),导致截取空字符串(比如单个s的情况)。
  2. 未处理最后一个单词:最后一个单词sentence后没有空格,find(' ')返回-1,切片变成st[indexCount:-1],会丢失最后一个字符,得到sentenc。

简洁正确解法

使用split()方法可以快速解决问题,该方法会将字符串按空格分割为单词列表,遍历判断每个单词首字符即可:

for word in st.split():
    if word[0] == 's':
        print(word)

修正后的代码及知识点总结

修正后的代码解决了索引偏移和最后一个单词的问题:

st = 'Print only the words that start with s in this sentence'
space = ' '
before = space
indexCount = 0
for letter in st:
    if before == space and (letter == 's' or letter == 'S'):
        if st[indexCount:].find(' ') == -1:
            endIndex = None
        else:
            endIndex = st[indexCount:].find(' ') + indexCount
        print(st[indexCount:endIndex])
    before = letter
    indexCount += 1

从中学到两个关键知识点:

  • 子串的索引是相对于自身的,截取原字符串的对应部分时,需要将子串内的偏移量加上原字符串的起始索引,得到正确的结束位置。
  • find()方法找不到目标字符时会返回-1,此时需要特殊处理(比如用None作为切片结束索引,直接截取到字符串末尾)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 07:47:19