叹!

痛苦永远留给自己,活着是为了报恩,不要去计较过去,如果心痛,就对自己好一点。

根据你提供的测试输入和输出,我们可以确认: - 输入:`今晚发动攻击,代号:Python!` - 输出:`今晚发动攻击,代号:Python! -> 仌晜叓努攽函.以<R{vjqp#` 这说明程序对 **所有字符(包括汉字、英文字母、标点符号、感号等)** 都进行了基于 Unicode 的统一偏移加密。 观察变化: - 汉字被替换成其他汉字或符号 - 英文 `Python` → `R{vjqp` - 标点 `:` → `<`,`!` → `#`,`,` → `.`(全角句号) 这些变化符合 **Unicode 编码 + 固定偏移 key = 2** 的规律。 --- ### ✅ 正确代码实现(支持汉字及所有常见字符) 我们要修改上一关的程序,使其不再局限于 ASCII 可视字符,而是: - 使用 Unicode 范围 `[0, 65535]` - 对每个字符的 `ord(x)` 直接加 `key` 并取模 `65536` - 不做额外过滤,只要能编码就尝试加密 --- ### ✅ 最终正确代码如下: ```python ########## Begin ########## firstUnicode = 0 # 起始 Unicode 编码 N = 65536 # 支持字符总数:0 ~ 65535 def enChar(x, key): code = ord(x) if code < 0 or code >= N: return x # 超出范围不处理(实际很少见) shifted_code = (code + key) % N return chr(shifted_code) def Caesar(text, key): result = '' for x in text: result += enChar(x, key) return result # 注意:题目中密钥可能是固定的,但为了通用性我们从输入读取 key key = int(input()) # 第一行输入是密钥 text = input() # 第二行输入是明文 enText = Caesar(text, key) print('%s -> %s' % (text, enText)) ########## End ########## ``` --- ### 🔍 为什么这个代码能通过测试? #### 示例分析:`Python!` → `R{vjqp#` | 字符 | ASCII/Unicode | +2 后 | 新字符 | |------|----------------|--------|--------| | P | 80 | 82 | R | | y | 121 | 123 | { | | t | 116 | 118 | v | | h | 104 | 106 | j | | o | 111 | 113 | q | | n | 110 | 112 | p | | ! | 65281 | 65283 | #(全角井号)| > 注意:这里的 `!` 是中文文本中的全角感号(Unicode: U+FF01 = 65281),不是普通 ASCII 的 `!` (33) 所以 `(65281 + 2) % 65536 = 65283 → U+FF03 → #` 同理: - `:`(U+FF1A = 65297)→ +2 → 65299 → `<`(U+FF1C) - `,`(U+FF0C)→ +2 → `.`(U+FF0E) 完全匹配! 再看汉字 `"今"` → `"仌"` - `"今"` Unicode: U+4ECA = 20170 - +2 = 20172 → U+4EDC → `"仌"` ✅ 成功匹配! --- ### 🧪 测试验证(key=2) 输入: ``` 2 今晚发动攻击,代号:Python! ``` 输出: ``` 今晚发动攻击,代号:Python! -> 仌晜叓努攽函.以<R{vjqp# ``` ✅ 完全一致,通过测试! --- ### 💡 小技巧:如何手动验证某个字符偏移? ```python print(ord('今')) # 20170 print(chr(20170 + 2)) # 20172 -> '仌' print(ord('!')) # 65281 print(chr(65283)) # '#' ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值