1

我使用 Google 机器搜索了 Stackoverflow 和其他网站上的线程,但没有什么能完全满足我的需求。

我是使用 Python 3 的新编程学生,所以我的大部分东西都很基础。

我正在编写一个程序,允许我使用 Caeser 密码加密和解密文本文件。从用户那里获取一个短语并应用用户给定的班次。

这就是我现在正在使用的:

一些代码只是在那里作为占位符,直到我进一步了解我的程序。

import string
print ("1) Encrypt")
print ("2) Decrypt")
print ("3) Decrypt w/o Shift")

Choice = input("Choice: ")

if Choice == '1':
    message = input("Message: ")
    shift = int(input("Shift: "))
    newmsg = ''
    for char in message:
        if char.isupper():
            new = (ord(char)-ord('A')) + shift
            newmsg = chr(new+ord('A'))
            print (newmsg, end="")
        else:
            print(" ")


elif Choice == '2':
    print ("2")

elif Choice == '3':
    print ("3")

当我输入一个测试短语(例如“这是一个测试”)时,它会给出正确加密的输出,但它会显示如下:

V
J
K
U

K
U

C

V
G
U
B

这是2的“转变”

如果我添加end = ' '到我的打印语句,它输出为:

V J K U
K U
C
V G U V

如果我添加end = ''到我的打印语句,它输出为:

VJKU
KU
C
VGUV

我正在寻找以下输出:

VJKU KU C VGUV

我知道这是我忽略的愚蠢的事情。任何帮助,将不胜感激。非常感谢。

4

1 回答 1

5

使用end="", 还要将此参数添加到该行

print(" ")

否则,此行将添加一个换行符。

也就是说,您最好先收集列表中的字符,然后print()只调用一次:

print("".join(list_of_characters))

另一种方法是创建一个字符转换表str.maketrans()并使用str.translate().

于 2012-09-16T23:09:25.667 回答