Python加密代码未返回ASCII字符问题求助
解决凯撒密码加密返回非预期字符的问题
嘿,作为Python新手能写出凯撒密码的核心逻辑已经超棒啦!你遇到的“未返回ASCII字符”问题,其实是代码没处理非字母字符导致的——咱们一步步拆解下:
问题根源
你的代码只判断了字符是否为大写字母,所有非大写的内容(包括小写字母以外的空格、标点、数字)都会进入else分支,强行按照小写字母的规则计算。比如输入里的空格(ASCII码32),代入公式后会被转换成奇怪的字符(甚至可能是不可打印的控制字符),这就让你误以为没有返回ASCII字符。
另外还有个小细节:你用for char in range(len(text))再通过索引取字符的写法有点绕,Python里可以直接遍历字符串的每个字符哦~
修正后的代码
我帮你调整了代码,添加了非字母字符的处理逻辑,同时优化了遍历方式:
def encrypt(text, shift): cipher = "" for char in text: if char.isupper(): cipher += chr((ord(char) + shift - 65) % 26 + 65) elif char.islower(): cipher += chr((ord(char) + shift - 97) % 26 + 97) else: # 非字母字符直接保留,不参与加密 cipher += char return cipher
关键修改点
- 精准判断字符类型:用
elif char.islower()单独处理小写字母,把非字母字符(空格、标点、数字等)单独拿出来直接追加到结果里,避免强行转换出奇怪字符。 - 更简洁的遍历方式:直接遍历
text的每个字符,不用通过索引取值,代码可读性更高。
测试示例
比如你输入:
print(encrypt("Hello, World!", 3))
会得到正常的ASCII加密结果:Khoor, Zruog!
如果是纯字母输入,比如encrypt("ABCxyz", 2),会返回CDEzab,完全符合凯撒密码的预期。
内容的提问来源于stack exchange,提问作者SimmiJay
相关产品推荐
相关产品推荐

