繁体   English   中英

TypeError的Python问题:+:'int'和'str'的不支持的操作数类型

[英]Python problem with TypeError: unsupported operand type(s) for +: 'int' and 'str'

我是整个编程世界的新手,我在进行cs50的caesar练习时遇到了Python的问题。 我无法弄清楚出了什么问题,非常感谢你的帮助!

from cs50 import get_string
from sys import argv

if len(argv) != 2:
    print("only input one integer")

x = argv[1]

n = get_string("plaintext: ")

for i in range(len(n)):

if str.islower(n[i]):
    lower = (((ord(n[i]) - 97 + x) % 26)) + 97
    print(chr(lower), end="")

elif str.isupper(n[i]):
    upper = (((ord(n[i]) - 65) + x) % 26) + 65
    print(chr(upper), end="")

else:
    print(f"{n[i]}", end="")

在终端窗口中预计:

python caesar.py 1
plaintext: hi
ij

但它说:

Traceback (most recent call last):
  File "caesar.py", line 14, in <module>
    lower = (((ord(n[i]) - 97 + x) % 26)) + 97
TypeError: unsupported operand type(s) for +: 'int' and 'str'

我认为变量x是一个字符串。 int(argv[1])替换argv[1]

您试图以数学方式添加整数和字符串,或一段文本。 该文本可能看起来像一个“5”,但对于计算机来说,它是一个代表书面5的字符 ,而不是字面数字5.通常,当某些东西像input()input() input()一样接受用户输入时,它默认将其视为键入string

你想要int()float()函数,使得x = int(argv[1])将字符串中的数字转换为实际数字。 (float()表示小数点数,也就是“浮点数”)显然,如果你输入一些不是数字的东西,它们就会破坏。

sys.argv列表为您提供了一个字符串列表,当您执行x = argv[1] ,x将成为一个字符串。

现在当你尝试做lower = (((ord(n[i]) - 97 + x) % 26)) + 97 ,你试图添加一个整数和一个字符串,这是不可能的,所以唯一的变化你需要在你的代码中做的是确保你输入的x是一个整数,你可以使用x = int(argv[1])来做

所以你的最终代码变成了

from cs50 import get_string
from sys import argv

if len(argv) != 2:
    print("only input one integer")

#Changed this! Now x is an integer, since you convert the string in argv[1] to an integer
x = int(argv[1])

n = get_string("plaintext: ")

for i in range(len(n)):

    if str.islower(n[i]):
        lower = (((ord(n[i]) - 97 + x) % 26)) + 97
        print(chr(lower), end="")

    elif str.isupper(n[i]):
        upper = (((ord(n[i]) - 65) + x) % 26) + 65
        print(chr(upper), end="")

    else:
        print(f"{n[i]}", end="")

输出现在正如预期的那样出现

plaintext: hi
ij

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM