Python:文本与ASCII相互转换程序

2 投票
3 回答
6464 浏览
提问于 2025-04-16 02:55

我刚接触Python 2.7,想写一个简单的程序。这个程序需要从用户那里获取一个字符串,把所有字符转换成它们的ASCII值,然后在这些ASCII值上加2,最后再把新的值转换回文本。所以,比如说,如果用户输入的是“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

这个程序好像运行得不太对,任何帮助都非常感谢。谢谢。

3 个回答

1

你把字符和字符串搞混了。当你遍历一个字符串(比如“message”)时,每次循环你会得到一个单独的字符。而且,ord(ch)是一个整数,也就是一个数字,所以你不能对它进行“拆分”。

另外,不要用“input”,要用“raw_input”。

你想要的可能类似于这个:

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

在这里,你还没有新的消息,因为循环一次只给你一个字符,所以我把变量改名为“encoded_ord”,这样更能说明它的意思。

现在,你可以把这个“encoded ord”转换成一个编码后的字符,并把它加到编码后的消息里:

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

print "encoded msg in text:", encodedmessage
1

你是在尝试做一个 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,} 就会变成不可打印的字符,而 ~ 的结果会根据你的字符编码而不同。

2

message2 = ord(ch) + 2 这行代码把 message2 变成了一个整数,所以你当然不能在它上面调用 split 方法——它只是一个代表单个字符的整数,根本没有必要去 分割 它!而且,你在每次循环的时候都把 encodedmessage 重置为空字符串,所以一旦你解决了 split 的问题(只需要把它删掉就行!),你看到的只会是最后一个字符;把 encodedmessage = '' 移到循环 之前

撰写回答