You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python实现凯撒密码遇异常:仅加密单个字符,求问题排查

你的凯撒密码函数问题修复方案

我帮你找出了代码里的几个关键问题,正是这些问题导致它只能处理单个字符:


问题1:隐性拼写错误

你在new_index>25的分支里写了aphabet[new_index],这里把alphabet拼错了。如果代码里保留这个错误,运行到该分支时会直接抛出NameError,必须修正为正确的变量名才能让所有分支正常工作。

问题2:条件判断逻辑错误

你的elif new_index<25逻辑完全不成立:比如当new_index等于25时,这个条件不满足,会走到else分支;而else分支里的eword.join(letter)是错误用法——*str.join()*需要传入一个可迭代对象(比如列表),而且它不会修改原字符串,而是返回新字符串,所以这行代码等于没做任何操作,导致这部分字符根本没被添加到eword里。

问题3:未处理负偏移场景

如果传入的offset是负数(比如-3),你的代码现在没有处理new_index<0的情况,会导致索引越界报错。


修正后的代码

首先确保你定义了字母表:

alphabet = 'abcdefghijklmnopqrstuvwxyz'

然后是修复后的加密函数:

def c(word, offset):
    eword = ""
    for letter in word:
        if letter in alphabet:
            index_letter = alphabet.index(letter)
            # 用取模运算自动处理正负循环偏移,比条件判断更简洁可靠
            new_index = (index_letter + offset) % 26
            eword += alphabet[new_index]
        else:
            # 非字母字符直接追加,无需使用join
            eword += letter
    return eword

测试验证

运行c("test", 3)会得到'whvw',完全符合凯撒密码的加密规则:

  • t(19) +3 → 22 → w
  • e(4)+3 →7→h
  • s(18)+3→21→v
  • t(19)+3→22→w

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

火山引擎 最新活动