Python:文本转换为ASCII&;ASCII到文本转换程序

Python:文本转换为ASCII&;ASCII到文本转换程序,python,ascii,Python,Ascii,我是Python2.7的新手,尝试创建一个简单的程序,它从用户那里获取一个输入字符串,将所有字符转换为ascii值,将2添加到所有ascii值,然后将新值转换为文本。例如,如果用户输入为“test”,则输出应为“vguv” 这是我迄今为止编写的代码: message = input("enter message to encode") for ch in message: message2 = ord(ch) + 2 print "\n\n" encodedmes

我是Python2.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

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

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

您正在混淆字符和字符串。当您循环遍历字符串(例如“message”)时,每次迭代都会得到一个字符。而且,ord(ch)是一个整数,一个数字,所以不能“拆分”它

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

您想要的可能与此类似:

message = raw_input("enter message to encode: ")
encoded_message = ""
for ch in message:
     encoded_ord = ord(ch) + 2
这里您还没有新消息,因为循环一次给您一个字符,所以我将变量重命名为“encoded_ord”,它更好地描述了它所包含的内容

现在,您可以将此“编码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,
}
将不可打印,
~
将根据您的字符编码而变为某种形式

通常对字符串使用+=运算符是不好的做法,不是吗?每次调用时,您都在创建一个新字符串。也许最好保留一个字符列表,然后执行
“”。加入(whateverlist)
?亚历克斯:是的,我也考虑过这一点。但是我认为这会混淆OP,所以在这种情况下是可以原谅的。@Alex Bliskovsky:虽然经常重复说,
'.join()
比字符串串联更快,但我认为在Python的现代版本中,这不一定是真的。事实上,在这个微测试中,
python-mtimeit-s“导入测试”测试。add_strings(1000)
需要201us,而
python-mtimeit-s“导入测试”测试。join_strings(1000)
每个循环需要250us。我很想听听@Alex Martelli是否会参与其中。啊,看起来@Alex Martelli已经回答了这个问题:@Alex,是的,但我同意@rbp——这里显然有更深层次的问题,首先解决它们似乎更可取。总是花点时间试着消化口译员向你抛出的错误。此代码将返回
AttributeError:“int”对象没有属性“split”
,并显示不起作用的行。它相当直接地说
message2
是一个
'int'对象,这可能是您没有预料到的。如果你想不出来(有些错误可能相当模糊),就把错误贴出来,而不是仅仅说“它不起作用”。顺便说一下:Nick t的建议非常合理:从翻译那里找出错误,看看它的意思。它还应该给你一个行号和一些上下文,这样你就知道去哪里找。确保每个变量都保持着你认为它保持着的状态。