我的代码输出在每一行都是一个不同的字母

时间:2014-11-01 14:23:17

标签: python python-3.x encryption

message =input("Type message ")
shift = int(input("Enter number to code "))
message = message.lower()
print (message)


for a in message:        
  if a in "abcdefghijklmnopqrstuvwxyz" :
      number = ord(a)
      number += shift
      if number > ord("z") :
        number -= 26
      elif number < ord("a") :
       number += 26
     message = chr(number)
   print (message)

上面是我在python上加密普通文本到Caesar密码的代码,但代码的结果在每一行都是一个不同的字母。

我对编码很陌生,所以你认为有用的任何帮助或资源都会受到高度赞赏。

3 个答案:

答案 0 :(得分:1)

您需要修复缩进并在每次浏览消息时连接编码信件

您正在阅读此处的消息。如果您使用的是Python 2.7,则应使用“row_input”

message = raw_input("Type message ")

如果您使用的是Python 3

message = input("Type message ")

这里也一样,但是你正在把你读到的内容转换为整数

shift = int(raw_input("Enter number to code "))

您正在将字符串转换为小写

message = message.lower()

您正在打印消息

print (message)

您正在循环显示消息,消息中的每个字符都经过测试

for a in list(message):
  • 如果charachter是字母
  if a in "abcdefghijklmnopqrstuvwxyz" :
number = ord(a) 
number += shift
  • 我们正在移动字母表的ascii数字以便稍后从中生成另一个字母。我们应该将数量限制在区间
if number > ord("z") :
  number -= 26
elif number < ord("a") :
  number += 26
  • 我们根据ascii编码从数字生成字母表,并将其与其他字符串连接
m += chr(number)
print "Coded message:",m

您的功能应如下所示:

message = input("Type message ")
shift = int(input("Enter number to code "))
message = message.lower()
print (message)
m=''

for a in message:        
  if a in "abcdefghijklmnopqrstuvwxyz" :
    number = ord(a)
    number += shift
    if number > ord("z") :
      number -= 26
    elif number < ord("a") :
      number += 26
    m += chr(number)
      #message = chr(number)

print("The encoded message:",m)

答案 1 :(得分:0)

您的版本不起作用,因为在message = chr(number)中,您使用单个“加密”字符覆盖输出。

但即使你解决了这个问题,你的代码也存在一些问题: if / else + - 例如,使用modulo运算符%可以更好地编写。

您也不需要对字母表进行硬编码,它存在于string模块中。最后:python的字符串有translate个方法,所以你可能想要使用它们:

import string
message =input("Type message ").lower()
shift = int(input("Enter number to code "))

encrypted = message.translate(str.maketrans(string.ascii_lowercase,
    string.ascii_lowercase[shift:]+string.ascii_lowercase[:shift]))
print(encrypted)

答案 2 :(得分:0)

格式正确且工作正常,我为我的CA创建了相同的代码

message =input("Type message ")
shift = int(input("Enter number to code "))
message = message.lower()
print (message)


for a in message:        
    if a in "abcdefghijklmnopqrstuvwxyz" :
        number = ord(a)
        number += shift
        if number > ord("z") :
            number -= 26
        elif number < ord("a") :
            number += 26
    message = chr(number)
    print (message)