Python While循环忽略If语句

Python While循环忽略If语句,python,Python,我正在生成“键值”,这将帮助函数加密和解密完成它们的工作 正在运行'if ans==e'语句,并返回输出,但忽略'k=True'语句,导致程序在encrypt函数上进入无限循环。有人知道它为什么这样做吗 ans = input("Would you like to decrypt or encrypt your message (e/d)? ") key = Generate.gen.keys(self) k = False while not k: if ans == "e":

我正在生成“键值”,这将帮助函数加密和解密完成它们的工作

正在运行'if ans==e'语句,并返回输出,但忽略'k=True'语句,导致程序在encrypt函数上进入无限循环。有人知道它为什么这样做吗

ans = input("Would you like to decrypt or encrypt your message (e/d)? ")
key = Generate.gen.keys(self)

k = False
while not k:

    if ans == "e":
        encrypt(key[0], key[1])
        k = True

    if ans == "d":
        decrypt(key[0], key[2])
        k = True

    else:
        k = False


def encrypt(n, e):
    output = []
    plain_text = input("Please enter message: ")
    raw = list(plain_text)
    print(raw)

    for char in raw:
        ascii_val = ord(char)
        pub = ascii_val ** e % n
        print(pub)
        output.append(pub)
    print(output)
非常感谢,, 老茧

如果您阅读代码,您的逻辑如下

  • 如果ans=='e'设置k=true
  • 如果ans='d'设置k=true
  • 如果是d’set k=false
  • 如果ans=='e'为true,那么ans不能=='d',因此运行else案例,将k设置回false

    考虑对ans=='d'使用elif
    elif ans=='d':

    如果
    ans==“e”
    为true,则将确实执行
    k=true

    然后,下一个
    if
    /
    else
    语句出现

    如果
    ans
    “e”
    ,则它不会同时是
    “d”
    。因此,将执行
    else
    部分,将
    k
    设置回
    False


    您需要使用
    elif ans==“d”
    ,这样如果ans==“e”以前为真,则跳过
    此部分。

    您可能希望
    elif
    而不是第二个
    if
    :如果
    ans
    “e”
    k
    将设置为
    ,然后我们检查
    ans
    是否为
    “d”
    ,而它不是,因此我们转到
    else
    分支,将
    k
    设置回
    False
    。为什么会有
    while
    循环?如果ans=='e'
    或ans=='d',则只需检查
    。如果不是呢?您将有一个无限循环,因为您不允许更改
    ans
    if ans == "e":
        encrypt(key[0], key[1])
        k = True
    if ans == "d":
        decrypt(key[0], key[2])
        k = True  
    else:
        k = False
    
    k = False
    while not k:
        if ans == "e":
            # ...
            k = True
    
        if ans == "d":
            # ...
        else:
            k = False