Python:文本到ASCII和ASCII到文本转换程序

2024-09-25 02:30:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python 2.7的新手,尝试创建一个简单的程序,它从用户那里获取一个输入字符串,将所有字符转换为其ascii值,将2添加到所有ascii值,然后将新值转换为文本。例如,如果用户输入是“test”,那么输出应该是“vguv”。

这是我到目前为止写的代码:

message = input("enter message to encode")

for ch in message:
     message2 = ord(ch) + 2
     print "\n\n"
     encodedmessage = ""
     for item in message2.split():
            encodedmessage += chr(int(item))

print ("encoded msg in text : "), encodedmessage

它似乎不能正常工作,任何帮助都将不胜感激。谢谢。


Tags: 字符串用户in程序messageforasciich
3条回答

你把字符和字符串混在一起了。当你循环遍历一个字符串(比如“消息”)时,每次迭代都会得到一个字符。同时,ord(ch)是一个整数,一个数字,所以不能“拆分”它。

另外,不要使用“输入”,而是使用“原始输入”。

你想要的可能是类似的东西:

message = raw_input("enter message to encode: ")
encoded_message = ""
for ch in message:
     encoded_ord = ord(ch) + 2

这里您还没有新的消息,因为循环一次给您一个字符,所以我将变量重命名为“encoded\u ord”,这样可以更好地描述它的内容。

现在,您可以将此“encoded ord”转换为编码字符,并将其添加到编码消息中:

     encoded_ch = chr(encoded_ord)
     encoded_message += chr(encoded_ch)

print "encoded msg in text:", encodedmessage

你想做一个rot-13(或广义的“rot-x”)类型函数吗?

from string import ascii_uppercase, ascii_lowercase

def rotx(data,rotby):
    total = []
    for char in data:
        if char in ascii_uppercase:
            index = (ascii_uppercase.find(char) + rotby) % 26
            total.append(ascii_uppercase[index])
        elif char in ascii_lowercase:
            index = (ascii_lowercase.find(char) + rotby) % 26
            total.append(ascii_lowercase[index])
        else:
            total.append(char)
    return "".join(total)

跑步:

>>> import rotx
>>> rotx.rotx("test",2)
'vguv'
>>> rotx.rotx("IBM-9000",-1)
'HAL-9000'

如果在ASCII字符中添加2个字符,}将变为不可打印,~将变为取决于字符编码的内容

message2 = ord(ch) + 2使message2成为一个整数,因此您当然不能在它上调用split——它是一个表示单个字符的单个int,为什么要将它拆分?!另外,每次循环都要将encodedmessage重置为空字符串,因此一旦修复了split的奇怪之处(只需删除它!)当然,您只会看到最后一个字符;将encodedmessage = ''移到循环之前的

相关问题 更多 >