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
相关产品推荐
相关产品推荐

