我需要从我获得的数字值到字符拼出一个不起作用的单词的部分,它说我需要在最后一部分使用整数?
接受字符串
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))
答案 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'