0

我有以下代码,它给了我一个错误,说它不能将'int'对象隐式转换为str。使用了 if 语句,所以如果 WORD 中的一个字母是 ascii 125 并且我必须将其移动 5,我希望将其移动到 goto ascii 32 并计算。如果 word 中的任何字母小于 ascii 32 shift,则 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
4

2 回答 2

2

恐怕你写的代码有点复杂。不过有几点:

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

您得到的错误来自这一行:

newword =newword+ chr(newword) + offset

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

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

也许你打算在这条线上做的更像是newword = newword + chr(newword + offset)

但是,这不会为您提供“单词”的凯撒密码,因为您每次在此处执行作业时都会用新字符覆盖以前移位的字符 - >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)
于 2013-09-15T01:49:11.000 回答
0

两个问题:

1)您在每次循环迭代时设置 newword,因此您永远不会得到完整的结果。

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

于 2013-09-15T01:45:53.397 回答