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

为何我的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

主要修改说明

  1. 重置a的位置:把a = 0移到外层循环内部,每次执行新的移位时,都能从头遍历输入字符串
  2. 优化移位逻辑:增加了字母循环处理,解决了z/Z移位后无法显示正确字符的问题
  3. 提升可读性:用end=""让解密后的字符在同一行输出,同时增加移位次数的标识
  4. 规范命名:调整变量名,让代码更易理解

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:48:31