我目前正在尝试制作凯撒解码器,所以我试图找出如何获取用户输入的移位值,并使用该输入移动列表中的每个项目。但每次我尝试,它只是一直给我一个错误。
例如:
ASCII中的 word
将是:
[119, 111, 114, 100]
如果给定的班次输入是2
,我希望列表为:
[121, 113, 116, 102]
请帮忙。这是我第一次编程,这个凯撒解码器让我发疯:(
这是我到目前为止所拥有的
import string
def main():
inString = raw_input("Please enter the word to be "
"translated: ")
key = raw_input("What is the key value or the shift? ")
toConv = [ord(i) for i in inString] # now want to shift it by key value
#toConv = [x+key for x in toConv] # this is not working, error gives 'cannot add int and str
print "This is toConv", toConv
此外,如果你们不使用任何花哨的功能,将会很有帮助。相反,请使用现有代码。我是新手。
答案 0 :(得分:6)
raw_input
返回一个字符串对象,ord
返回一个整数。此外,正如错误消息所述,您无法将字符串和整数与+
:
>>> 'a' + 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'int' objects
>>>
然而,这正是您在此尝试做的事情:
toConv = [x+key for x in toConv]
在上面的代码中,x
将是一个整数(因为toConv
是一个整数列表),而key
将是一个字符串(因为您使用raw_input
来得到它的价值)。
您可以通过简单地将输入转换为整数来解决问题:
key = int(raw_input("What is the key value or the shift? "))
之后,您的列表理解将按预期工作。
以下是演示:
>>> def main():
... inString = raw_input("Please enter the word to be "
... "translated: ")
... # Make the input an integer
... key = int(raw_input("What is the key value or the shift? "))
... toConv = [ord(i) for i in inString]
... toConv = [x+key for x in toConv]
... print "This is toConv", toConv
...
>>> main()
Please enter the word to be translated: word
What is the key value or the shift? 2
This is toConv [121, 113, 116, 102]
>>>
答案 1 :(得分:1)
如果您对单行内容感兴趣:
shifted_word = "".join([chr(ord(letter)+shift_value) for letter in word])