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

Python加密程序报错求助:字符串反转+字母后移3位算法

排查并修复你的Python加密程序报错

咱们一步一步拆解你的代码问题,先把报错根源揪出来,再逐个解决:

1. 遍历字符串的方式错误

你在encrypt函数里写了for i in len(word),这绝对会触发报错——len(word)返回的是一个整数,Python没法直接遍历整数。正确的做法是用range(len(word))生成索引序列,或者更简洁地直接遍历字符串里的每个字符。

2. 未初始化变量coded

函数里直接执行coded = coded + newtxt,但coded一开始根本没定义,Python不知道这个变量的初始值是什么,必然会抛出NameError。得先把coded初始化为空字符串:coded = ""。

3. 算法逻辑不匹配

你明确说算法是先反转字符串,再将每个字母后移3位,但代码里调用encrypt(original)时,传入的是原字符串,完全没用到你已经反转好的actual_word,等于跳过了反转步骤,不符合预期逻辑。

4. 冗余的mid函数

这个函数用来取单个字符完全没必要,直接用word[i]或者遍历字符时直接拿当前字符就行,删掉它能让代码更简洁。

修复后的完整代码

original = input('Enter a phrase: ') 
# 先执行字符串反转步骤
reversed_word = original[::-1] 

def encrypt(word): 
    coded = ""  # 初始化空字符串用于存储加密结果
    for char in word:  # 直接遍历每个字符更直观
        # 可选优化:只对字母执行移位,非字母字符直接保留
        if char.isalpha():
            coded += chr(ord(char) + 3)
        else:
            coded += char
    return coded 

encrypted = encrypt(reversed_word)  # 传入反转后的字符串执行加密
print(encrypted) 
input('Press ENTER to exit')

额外优化建议

如果需要实现字母表循环移位(比如z后移3位变成c,Z变成C),可以修改字符移位的逻辑:

if char.islower():
    coded += chr((ord(char) - ord('a') + 3) % 26 + ord('a'))
elif char.isupper():
    coded += chr((ord(char) - ord('A') + 3) % 26 + ord('A'))
else:
    coded += char

这样就能避免非字母字符的出现,让加密逻辑更严谨。

内容的提问来源于stack exchange,提问作者Markus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:18:04