将数字值转换为ascii字符?

时间:2016-10-02 20:16:02

标签: python ascii chr

我需要从我获得的数字值到字符拼出一个不起作用的单词的部分,它说我需要在最后一部分使用整数?

接受字符串

print "This program reduces and decodes a coded message and determines if it is a palindrome"
string=(str(raw_input("The code is:")))

将其更改为小写

string_lowercase=string.lower()
print "lower case string is:", string_lowercase

剥离特殊字符

specialcharacters="1234567890~`!@#$%^&*()_-+={[}]|\:;'<,>.?/"

for char in specialcharacters:
    string_lowercase=string_lowercase.replace(char,"")

print "With the specials stripped out the string is:", string_lowercase

输入偏移量

offset=(int(raw_input("enter offset:")))

将文本转换为ASCII码

result=[]
for i in string_lowercase:
    code=ord(i)
    result.append([code-offset])

从ASCII码转换为文本

text=''.join(chr(i) for i in result)
print "The decoded string is:", text.format(chr(result))

3 个答案:

答案 0 :(得分:0)

当您拨打result.append([code-offset])时,看起来您有一个列表列表而不是一个整数列表。这意味着稍后当您调用chr(i) for i in result时,您将列表而不是int传递给chr()

尝试将其更改为result.append(code-offset)

其他小建议:

  • raw_input已经为您提供了一个字符串,因此无需显式强制转换它。
  • 您可以更有效地删除特殊字符:

    special_characters = '1234567890~`!@#$%^&*()_-+={[}]|\:;'<,>.?/'
    string_lowercase = ''.join(c for c in string_lowercase if string not in special_characters)
    

    这使您只需要在string_lowercase中迭代special_characters一次而不是每个字符。

答案 1 :(得分:0)

当它只接受整数时,您将列表传递给chr。试试result.append(code-offset)[code-offset]是一个单项列表。

具体而言,而不是:

result=[]
for i in string_lowercase:
    code=ord(i)
    result.append([code-offset])

使用:

result=[]
for i in string_lowercase:
    code=ord(i)
    result.append(code-offset)

如果你理解列表理解,这也适用:result = [ord(i)-offset for i in string_lowercase]

答案 2 :(得分:0)

在执行.append()列表时,请使用code-offset代替[code-offset]。如下所示,您将值存储为一个列表(一个ASCII),而不是直接存储ASCII值。

因此你的代码应该是:

result = []
for i in string_lowercase:
    code = ord(i)
    result.append(code-offset)

但是,您可以将此代码简化为:

result = [ord(ch)-offset for ch in string_lowercase]

您甚至可以进一步简化代码。获取解码字符串的一行是:

decoded_string = ''.join(chr(ord(ch)-offset) for ch in string_lowercase)

示例,偏移量为2:

>>> string_lowercase = 'abcdefghijklmnopqrstuvwxyz'
>>> offset = 2
>>> decoded_string = ''.join(chr(ord(ch)-offset) for ch in string_lowercase)
>>> decoded_string
'_`abcdefghijklmnopqrstuvwx'