为何我的while循环仅执行一次?如何解决循环无法多次运行的问题?
问题:循环代码仅执行一次就停止,哪里出错了?
我希望让这段循环代码运行多次,但它仅执行一次就停止了。请问我哪里出现了错误?
代码如下:a = 0 Let = input("Enter a sentence to decrypt : ") Num = 0 b = 0 while b < 26 : Num = Num + 1 num = int(Num) while a < len(Let) : if ord(Let[a]) > 96 and ord(Let[a]) < 123 and ord(Let[a]) + Num > 96 and ord(Let[a]) + Num < 123 : print(chr(ord(Let[a]) + Num)) elif ord(Let[a]) > 64 and ord(Let[a]) < 91 and ord(Let[a]) + Num > 64 and ord(Let[a]) + Num < 91 : print(chr(ord(Let[a]) + Num)) a = a + 1 b = b + 1
问题根源
最核心的问题是变量a没有在每次外层循环开始时重置为0。第一次外层循环(b=0)执行时,内层循环会把a一直加到等于len(Let),之后的外层循环里,a已经不小于字符串长度了,内层循环直接跳过,所以看起来代码只执行了一次。
另外还有几个可以优化的小问题:
- 变量命名不符合Python的PEP8规范(应该用小写字母加下划线,比如
Let改成user_input会更清晰) num = int(Num)完全多余,Num本来就是整数类型- 当前的条件判断没有处理字母移位后超出范围的情况(比如
z+1应该回到a,但你的代码会直接跳过这个字符) - 每个字符单独打印一行,解密结果可读性很差
修正后的代码
# 规范变量命名,更符合Python编码习惯 user_input = input("Enter a sentence to decrypt : ") shift = 0 b = 0 while b < 26: shift += 1 # 关键修改:每次外层循环开始时,把a重置为0,确保内层循环能重新遍历整个字符串 a = 0 # 打印移位标识,方便区分不同的解密结果 print(f"\n--- 第 {shift} 次移位解密结果 ---") while a < len(user_input): char_code = ord(user_input[a]) # 处理小写字母,移位超出范围则循环到字母开头 if 97 <= char_code <= 122: new_code = char_code + shift if new_code > 122: new_code -= 26 print(chr(new_code), end="") # 处理大写字母,同样处理循环逻辑 elif 65 <= char_code <= 90: new_code = char_code + shift if new_code > 90: new_code -= 26 print(chr(new_code), end="") # 非字母字符直接原样输出 else: print(user_input[a], end="") a += 1 b += 1
主要修改说明
- 重置
a的位置:把a = 0移到外层循环内部,每次执行新的移位时,都能从头遍历输入字符串 - 优化移位逻辑:增加了字母循环处理,解决了
z/Z移位后无法显示正确字符的问题 - 提升可读性:用
end=""让解密后的字符在同一行输出,同时增加移位次数的标识 - 规范命名:调整变量名,让代码更易理解
内容的提问来源于stack exchange,提问作者ALEXANDER WU
相关产品推荐
相关产品推荐

