首页 > 解决方案 > Python Caesar Cipher 样式程序:为什么 python 给我不支持的操作数类型的 TypeError?

问题描述

我正在做一个项目,并且正处于项目的最后阶段,但遇到了这个错误:

Secret message: hello
shift: 4

Traceback (most recent call last):
File "program.py", line 5, in <module>
next_code = code + str(move)
TypeError: unsupported operand type(s) for +: 'int' and 'str'

我已经尝试过替代解决方案,但加号真的让我很困扰。因为我是初学者,所以我不太擅长这个东西,所以我需要一些帮助,我也想知道如何让它只切换大写字符,而不是符号。这是我的代码:

ask = input("Secret message: ")
move = input("shift: ")
for i in ask:
code = ord(i)
next_code = code + str(move)
next_character = chr(next_code)
print(next_character)

为什么我会得到这个,我的问题是什么?提前致谢!

标签: python

解决方案


将其添加到时需要转换move为整数,而不是字符串ord(i)

next_code = code + int(move)

但是,正如您在问题中指出的那样,这只会沿着 ASCII 表中的值移动消息中的所有字符,而不是沿着字母表移动字母字符。

您可以更改方法以使用大写字母的字符串,就像 Al Sweigart 的 python 密码电子书中的凯撒密码教程中的那样。

您还可以调整代码以在加密之前检查字符是否为字母。大写字母是 ASCII 表中的值 65-90。

if 65 <= code <= 90:
    # encrypt

推荐阅读