鱼C论坛

 找回密码
 立即注册
查看: 1056|回复: 2

[已解决]【python字符串课后作业】将数字转换成字母的shift那行不明白

[复制链接]
发表于 2024-7-3 18:10:02 | 显示全部楼层
本帖最后由 jackz007 于 2024-7-4 10:09 编辑

1、ord('a') = 97,ord('z') = 122,所以,'a' ~ 'z' 对应的 ASCII 编码数值的范围为 97 ~ 122,如果一个字符的编码不在此范围之内,那就可以断定,这个字符不是一个小写字母。这也是本题所谓"溢出" 的意思。

2、此题的前提条件是,字母表本身必须是一个闭环,就是说,'a' 的前一个字母是 'z' 后一个子字母是 'b',同样,'z' 的前一个字母是 'y',后一个字母是 'a'。

3、如果让 base = ord('a'),那么,任何一个小写字母都可以表达为
  1. chr(base + shift)
复制代码

        shift 就是目标字符对字母 'a' 在字母表中的位置偏移,比如,'a' 的 shift = ord('a') - ord('a') = 0,'c' 的 shift = ord('c') - ord('a') = 2,'z' 的 shift = ord('z') - ord('a') = 25. . . . . .。
        总之,只要把 shift 的数值约束在 0 ~ 25 之内,新字符的 ASCII 编码就不会越界(溢出),为了做到这一点,目标字符的表达需要进一步调整为:
  1. chr(base + shift % 26)
复制代码

        这样,当 shift 的数值超出 0 ~ 25 的时候,取余操作会确保其数值回归正常范围,从而实现字母表"自动回卷('z' 后为 'a','a' 前为 'z')"的效果。

        例如,对于字符串 'b3x5' 而言,'b3'shift = ord('b') - ord('a') + 3 = 4,目标字符为 chr(ord('a') + 4 % 26) = chr(97 + 4) = 'e''x5'shift =  ord('x') - ord('a') + 5 = 28, 目标字符为 chr(ord('a') + 28 % 26) = chr(97 + 2) = 'c'。所以,'b3x5' 所表达的字符串应该是 'ec'
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-9-22 06:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表