Python:文本与ASCII相互转换程序
我刚接触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 = ''
移到循环 之前。