python中的caesar密码问题

时间:2013-09-15 01:41:42

标签: python

我有以下代码,它给出了错误,说它不能隐式地将'int'对象转换为str。如果使用了if语句,那么如果WORD中的一个字母是ascii 125而我不得不将它移动5,我希望转换为转到ascii 32并计算。如果单词中的任何字母小于ascii 32 shift,则转移到32。

word=input("enter something to encrypt")
offset=int(input("Enter a number to shift it by"))
     for char in word:
        newword= ord(char)
        newword =newword+ chr(newword) + offset
        if newwword<32:
            result=result+95
        elif newword >126:
            result=result-95

2 个答案:

答案 0 :(得分:2)

你写的代码有点令人费解我害怕。但有几点指出:

  • 您的for循环不应缩进。
  • 您在if语句中计算的“结果”未在任何地方使用。我不确定这是故意的吗?

您获得的错误来自以下一行:

newword =newword+ chr(newword) + offset

newword是此语句之前的整数,因为ord(char)返回一个整数。

调用chr(newword将其转换为字符...但是您尝试将偏移量(这是一个整数)添加到该字符。

也许你在这一行上的意思更像是newword = newword + chr(newword + offset)

但是,这不会让你产生一个“单词”的凯撒密码,因为你每次在这里完成作业时都会用新字符覆盖你以前转移过的字符 - &gt; newword= ord(char)

总的来说,我建议您对代码进行以下更改:

word=input("enter something to encrypt")
offset=int(input("Enter a number to shift it by"))
newword = ""
for char in word:
    newchar = ord(char)
    newchar = newchar + offset
    if newchar < 32:
        newchar = newchar + 95
    elif newchar > 126:
        newchar = newchar - 95
    newword = newword + chr(newchar)
print("Encrypted word: " + newword)

答案 1 :(得分:0)

两个问题:

1)你在每次循环迭代时设置newword,这样你就永远不会得到完整的结果。

2)您将newword与整数进行比较。您应该保存ord值,为其添加偏移量,将其与32和126进行比较,使用chr将其转换回char,然后将其添加到使用{{初始化的新词1}}在循环之外,并在循环之后打印新词。所有这些步骤的顺序都很重要!