Python如何用ord()和chr()替代内置方法处理字符串及修复报错
题目要求
编写程序,不使用内置字符串方法,仅可使用ord()和chr()函数,处理输入句子,输出结果中仅保留原句里的字母和空格。
预期输入输出
Enter a sentence: I’m 9 years old. >>> Im years old
原有问题代码与报错
提交的实现代码如下:
phrase = "I'm 9 years old." result = '' for i in phrase: if i == 9: result = ord(i) + ord(23) elif i == "'": result = ord(i) - ord(7) print(result)
运行后抛出报错:TypeError: ord() expected string of length 1, but int found
错误点梳理
- 直接触发报错的原因:
ord()函数仅接受长度为1的字符串作为入参,代码里写的ord(23)、ord(7)传入的是整数类型参数,不符合入参要求,直接触发类型错误。 - 判断逻辑错误:遍历字符串拿到的每个元素都是字符类型,
i == 9是把字符和整数9做比较,永远不会成立;数字字符'9'对应的ASCII码是57,和整数9不是同一个值。 - 处理逻辑偏离需求:题目要求是过滤掉非字母、非空格的字符,不需要对撇号、数字这类要删除的字符做编码加减计算,直接跳过即可。
- 结果拼接逻辑错误:每次都是直接给
result重新赋值,没有把符合要求的字符逐个追加到结果里,就算不报错也拿不到完整的处理后句子。
正确解题思路
- 先明确需要保留的字符对应的ASCII码值范围:
- 空格:ASCII码为32
- 大写英文字母:ASCII码范围65(对应
'A')~90(对应'Z') - 小写英文字母:ASCII码范围97(对应
'a')~122(对应'z')
- 遍历输入字符串的每个字符,用
ord()拿到当前字符的ASCII值,判断是否属于上述三类保留范围:- 属于保留范围:把当前字符追加到结果字符串末尾
- 不属于保留范围:直接跳过,不做任何处理
- 遍历完成后输出结果即可,全程不需要调用其他内置字符串方法,仅用
ord()做值判断,完全符合题目限制。
修正后可运行代码
phrase = input("Enter a sentence: ") result = '' for char in phrase: code = ord(char) # 仅保留空格、大写字母、小写字母 if code == 32 or (65 <= code <= 90) or (97 <= code <= 122): result += char print(f">>> {result}")
运行代码输入测试用例I’m 9 years old.,会过滤掉撇号、数字9、末尾句点,输出>>> Im years old,和预期结果完全一致。
内容的提问来源于stack exchange,提问作者user17730718
相关产品推荐
相关产品推荐

