两个几乎相同的 python 文件给出不同的输出

Two almost identical python files giving different outputs

我在学校学习 python 计算课程和加密相关任务 我和一个朋友遇到了一个相当奇怪的错误: 我们每个人都有自己的程序副本,其中一个在 if 语句中使用 "or" 来决定程序是加密还是解密,这是唯一的区别,有没有人知道为什么会这样影响程序? 该程序打算从用户那里获取输入,然后 return 加密字符串,其中每个字符在字母表中移动了 5 个字母,解密选项与此相反,工作和 none 工作计划如下:

工作计划

mode = input("Do you want to encrypt or decrypt\t")
x=1
while x == 1:
    Raw_input = input('Write Text: ')
    Raw_input = Raw_input.lower()
    output = []
    printOut = str()
    if mode == "decrypt":
        for character in Raw_input:
            number = ord(character) + 91
            if number < 193:
                number += 26
            output.append(number)
        length = len(output)
        for counter in range (length):
            character = chr((output[counter])-96) 
            printOut = printOut + character
    elif mode == "encrypt":
        for character in Raw_input:
            number = ord(character) - 91
            if number > 26:
                number -= 26
            output.append(number)
        length = len(output)
        for counter in range (length):
            character = chr((output[counter])+96) 
            printOut = printOut + character
    print(printOut)

程序无效

mode = input("Do you want to encrypt or decrypt\t")
x=1
while x == 1:
    Raw_input = input('Write Text: ')
    Raw_input = Raw_input.lower()
    output = []
    printOut = str()
    if mode == "decrypt" or "d":
        for character in Raw_input:
            number = ord(character) + 91
            if number < 193:
                number += 26
            output.append(number)
        length = len(output)
        for counter in range (length):
            character = chr((output[counter])-96) 
            printOut = printOut + character
    elif mode == "encrypt" or "e":
        for character in Raw_input:
            number = ord(character) - 91
            if number > 26:
                number -= 26
            output.append(number)
        length = len(output)
        for counter in range (length):
            character = chr((output[counter])+96) 
            printOut = printOut + character
    print(printOut)

它似乎只是对问题代码不起作用的加密,它将轻松解密工作代码 returns。

在此先感谢您提供的任何帮助:)

if mode == "decrypt" or "d":

总是 True,你可能是说

if mode == "decrypt" or mode == "d":

所以第一个分支总是被采用。同样

elif mode == "encrypt" or mode == "e":

if mode == 'encrypt' or 'e': 将始终评估为 True 因为 'e'True

您需要使用:

if mode == 'encrypt' or mode == 'e':

或进行更全面的检查:

if mode.lower().strip() in ['encrypt', 'e']: