0

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

接受字符串

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))
4

3 回答 3

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'
于 2016-10-02T20:31:32.027 回答
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]

于 2016-10-02T20:25:48.777 回答
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.

于 2016-10-02T20:23:08.090 回答