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

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重新赋值,没有把符合要求的字符逐个追加到结果里,就算不报错也拿不到完整的处理后句子。
正确解题思路
  1. 先明确需要保留的字符对应的ASCII码值范围:
    • 空格:ASCII码为32
    • 大写英文字母:ASCII码范围65(对应'A')~90(对应'Z')
    • 小写英文字母:ASCII码范围97(对应'a')~122(对应'z')
  2. 遍历输入字符串的每个字符,用ord()拿到当前字符的ASCII值,判断是否属于上述三类保留范围:
    • 属于保留范围:把当前字符追加到结果字符串末尾
    • 不属于保留范围:直接跳过,不做任何处理
  3. 遍历完成后输出结果即可,全程不需要调用其他内置字符串方法,仅用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 12:45:40