Python while循环仅执行一次即终止的问题排查求助
问题:Python while循环仅执行一次就终止
我是Python初学者,写了一段代码,想把文本里的每个字母循环遍历字母表(每次向前移一位),同时统计每次移位后字母'e'的出现次数。但现在while循环只跑一次就停了,找不到问题所在。
原代码
inp = (input("Paste in the encoded message (over 100 words):\n")).lower() inp_list = list(inp) letters = ['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'] letter_counter = 26 new_list = [] number_of_es = [] def shift_list(lista): for item in lista: if item in letters: if (letters.index(item) - 1) < 0: position = (letters.index(item) - 1) + 26 else: position = (letters.index(item) - 1) new_list.append(letters[position]) else: new_list.append(item) return new_list while letter_counter > 0: number_of_es.append(inp_list.count("e")) print(number_of_es) letter_counter -= 1 inp_list = shift_list(inp_list) print(inp_list) print(letter_counter)
问题原因
核心问题出在全局变量new_list的累积效应:
new_list定义在函数外部,第一次调用shift_list时,它会被填充为移位后的字符列表;- 第二次调用
shift_list时,new_list没有被清空,函数会在原有内容的基础上继续追加新的移位结果,导致inp_list的长度翻倍,后续循环的逻辑完全混乱,看起来像是只执行了一次(实际可能还在运行,但数据已经错误,或者因数据量过大卡住)。
修复方案
把new_list移到shift_list函数内部,每次调用函数时重新初始化,同时用模运算简化字母索引的计算:
inp = input("Paste in the encoded message (over 100 words):\n").lower() inp_list = list(inp) letters = ['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'] letter_counter = 26 number_of_es = [] def shift_list(lista): new_list = [] # 移到函数内部,每次调用都创建新的空列表 for item in lista: if item in letters: # 模运算自动处理循环移位,无需判断负数 position = (letters.index(item) - 1) % 26 new_list.append(letters[position]) else: new_list.append(item) return new_list while letter_counter > 0: number_of_es.append(inp_list.count("e")) print(number_of_es) letter_counter -= 1 inp_list = shift_list(inp_list) print(inp_list) print(letter_counter)
修改说明
- 局部化
new_list:将new_list放在函数内部,确保每次调用shift_list都是基于当前输入的列表生成全新的移位结果,不会累积之前的数据。 - 简化索引计算:用
(index - 1) % 26替代原来的条件判断,模运算会自动处理负数情况(比如字母'a'的索引是0,0-1=-1,-1%26=25,正好对应字母'z'),代码更简洁高效。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

