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

凯撒密码两种Python实现代码输出顺序异常问题求教

凯撒密码实现的顺序问题分析

我是一名Python入门程序员。在了解.index()方法之前,我使用了一种替代方案实现凯撒密码。虽然代码能运行,但出现了奇怪的问题:输出字符串的顺序被打乱了,我不知道原因。

我的代码

初始定义

alphabet = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']

text = input("Type your message:\n").lower()
shift = int(input("Type the shift number:\n"))

# 测试输入:text = "code",shift = 5

第一次尝试(顺序错误的写法)

# First attempt
for index, price in enumerate(alphabet):
    new_index = shift + index
    for loop in text:
        if loop == price:
            print(alphabet[new_index])

第二次尝试(使用.index()的正确顺序写法)

# Second attempt using .index 
for letter in text:
    position = alphabet.index(letter)
    new_index = position + shift
    print(alphabet[new_index])

输出结果

第一种代码输出 = hijt

第二种代码输出 = htij

问题原因

第一种写法的循环逻辑完全搞反了:

  • 你先遍历整个字母表的每一个字母,再嵌套遍历输入文本的每个字符。
  • 只有当字母表中的字母和文本字符匹配时,才会输出移位后的字母。
  • 输入文本是"code",字母表的顺序是a→b→c→d→e→...→o→...,所以匹配顺序是先c,再o,再d,最后e,对应输出h、t、i、j,最终拼成hijt——这个顺序是字母表的匹配顺序,而不是输入文本的字符顺序。

第二种写法是严格按照输入文本的字符顺序遍历:先处理第一个字符c→h,再处理第二个o→t,接着第三个d→i,最后第四个e→j,所以输出htij,完全符合输入的顺序。

额外提醒:两种写法都没处理移位超过26的情况(比如shift=30时会触发索引越界错误),后续可以用new_index = (position + shift) % 26来解决这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 12:35:19