Python:Caesar Cipher,If语句和else语句同时为True?

yos*_*osh 1 python encryption if-statement

我几乎解决了这个问题,但由于某种原因,第一个If语句和else语句都对任何大写字母输入都是正确的.因此,如果ASCII值位于65和90之间,则if语句声明为true并打印出该值,但else语句也声明为true并打印出一个语句.如果我把'continue'放在第一个if语句的底部,这个程序可以完美地运行.但是我不知道它为什么这样工作.能否帮助我纠正我的逻辑缺陷,我不明白为什么会这样做.这是我的代码和输出:

k = int(raw_input("Please enter a value for k: ")) #Shifter number
original = raw_input("plaintext:  ") #Message user wants ciphered
original_as_array = list(original) ##I am turning the input into an array

for i in range(0,len(original)): ##Now seperating each character to add k
    char = original_as_array[i]
    charint = ord(char)

    if charint >= 65 and charint <=90:
        cipher_int = ((charint-65 + k) % 26)+65
        code_char = chr(cipher_int)
        print code_char,

    if charint >= 97 and charint <=122:
        cipher_int = ((charint-97 + k) % 26)+97
        code_char = chr(cipher_int)
        print code_char,


    else:
        print char,
Run Code Online (Sandbox Code Playgroud)

仅带上限的示例输出:

Please enter a value for k: 13
plaintext:  PLEASE HELP
C P Y L R E N A F S R E   U H R E Y L C P
Run Code Online (Sandbox Code Playgroud)

Ant*_*ton 7

您的第一个if语句与else语句无关.你要

if charint >= 65 and charint <=90:
        cipher_int = ((charint-65 + k) % 26)+65
        code_char = chr(cipher_int)
        print code_char,

elif charint >= 97 and charint <=122:
    cipher_int = ((charint-97 + k) % 26)+97
    code_char = chr(cipher_int)
    print code_char,


else:
    print char,
Run Code Online (Sandbox Code Playgroud)

否则(对于大写字母)第一个条件解析为true,第二个条件解析为false,并且因为语句解析为false,所以执行else语句.