Skip to main content
 首页 » 编程设计

Python:凯撒密码,If 语句和 else 语句同时为真

2025年05月04日11hnrainll

我几乎已经解决了这个问题,但出于某种原因,第一个 If 语句和 else 语句都对任何大写字母输入表示正确。因此,如果 ASCII 值介于 65 和 90 之间,则 if 语句声明为真并打印出该值,但随后 else 语句也声明为真并打印出一条语句。如果我把“继续”放在第一个 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, 

只有大写的示例输出:

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 

请您参考如下方法:

您的第一个 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, 

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