Python统计字符串非空格字符数时代码输出为-1的原因及修正方法
异常输出根因分析与代码修正
异常结果原因拆解
- 原代码中循环遍历字符串累加
count的逻辑,最终得到的是原字符串的全部字符总长度。以示例中的'Ricardo Cadenas'为例,其总字符数为15,此时循环结束后的count值就是15。 - 触发最终输出-1的核心逻辑是
word.count('')的特殊返回规则:Python中对字符串调用count方法匹配空字符串时,返回值为「字符串长度 + 1」。上述长度为15的字符串,传入空字符串参数的count调用会返回16。 - 最终计算为15 - 16,直接输出-1。
- 本质上这段代码的初始设计思路是“统计字符串总长度,再减去其中的空格数,最终得到不含空格的字符量”,但编写时误将需要剔除的空格符
' '写成了空字符串'',完全偏离了设计意图。另外原函数名string_lenght存在拼写笔误,正确拼写为string_length,虽不影响运行但建议遵循命名规范修正。
符合需求的修正实现
根据需求(统计字符串中不含空格的字符数量),提供几种可直接运行的实现方式:
- 贴合原思路的最小改动版本:去掉冗余的遍历累加逻辑,用Python内置
len()直接获取字符串总长度,修正计数参数为空格符
word = 'Ricardo Cadenas' def string_length(word): # 总长度减去字符串中包含的空格数量,即为不含空格的字符数 return len(word) - word.count(' ') print(string_length(word))
运行输出为14,和预期结果一致。
- 直观遍历版本:遍历过程中直接跳过空格做计数,从根源避免将空格纳入统计
word = 'Ricardo Cadenas' def string_length(word): count = 0 for char in word: if char != ' ': count += 1 return count print(string_length(word))
- 极简实现版本:直接移除字符串中的所有空格后计算长度
word = 'Ricardo Cadenas' def string_length(word): return len(word.replace(' ', '')) print(string_length(word))
内容的提问来源于stack exchange,提问作者Ricardo Cadenas
相关产品推荐
相关产品推荐

