通过偏移索引从现有字母列表生成新列表,代码输出为空如何解决
问题原因分析
你的实现思路本身存在逻辑错误,和第二个循环是否添加enumerate枚举无关,核心问题有以下4处:
- 循环嵌套逻辑颠倒:当前外层遍历字母表、内层遍历输入文本的逻辑会产生大量无效重复判断,正确逻辑应该是优先遍历输入文本的每一个字符,再匹配该字符在字母表中的索引。
- 判断条件完全错误:
if letter == alphabet是拿单个字符和整个字母表列表做等值判断,该条件永远不会成立,因此append逻辑永远不会执行,cipher_text自然为空。 - 枚举起始值设置错误:你给enumerate设置了
start=1,但Python列表索引从0开始,拿到的index会比字符的真实索引大1,后续偏移计算结果会全部错位。 - 缺少索引溢出处理:当偏移后的索引超过25(字母表最大索引)时,会直接报列表越界错误,需要对26取模实现循环偏移。
正确实现代码
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'] shift = 5 text = 'hello' cipher_text = [] for letter in text: # 获取当前字符在字母表中的索引 origin_idx = alphabet.index(letter) # 计算偏移后索引,对26取模防止越界 new_idx = (origin_idx + shift) % 26 cipher_text.append(alphabet[new_idx]) # 输出结果为 ['m', 'j', 'q', 'q', 'v'],拼接后得到密文 mjqqv print(cipher_text)
内容的提问来源于stack exchange,提问作者Liam Coates
相关产品推荐
相关产品推荐

