我是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
它似乎没有正常工作,任何帮助将不胜感激。感谢。
答案 0 :(得分:2)
message2 = ord(ch) + 2
使message2
成为一个整数,因此你当然不能在其上调用split
- 它是一个表示单个字符的int,为什么你想要< em>拆分吗?!另外,每次循环时你都会将encodedmessage
重置为空字符串,所以一旦你修复了split
怪异(只需删除它!),你就会看到最后一个被删除的字符串。课程;将encodedmessage = ''
移到之前循环。
答案 1 :(得分: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”,这更好地描述了它的含义。
现在,您可以将此“编码的ord”转换为编码字符,并将其添加到编码消息中:
encoded_ch = chr(encoded_ord)
encoded_message += chr(encoded_ch)
print "encoded msg in text:", encodedmessage
答案 2 :(得分: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'
如果您将2添加到ASCII字符,}
变为不可打印,~
会变成某些内容,具体取决于您的字符编码