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

TypeError的Python问题:+;的操作数类型不受支持:';int';和';str';,python,cs50,Python,Cs50,我对整个编程世界都是新手,在进行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.i

我对整个编程世界都是新手,在进行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'
回溯(最近一次呼叫最后一次):
文件“caesar.py”,第14行,在
下限=((ord(n[i])-97+x)%26))+97
TypeError:不支持+:“int”和“str”的操作数类型

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

您正试图以数学方式添加一个整数和一个字符串或一段文本。该文本可能看起来像“5”,但对计算机而言,它是一个表示书面5的字符,而不是文字数字5。通常,当某些内容接受用户输入(如
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

问题不在于Python!Python是强类型的,这意味着对字符串和数字应用
+
运算符将导致错误(即您得到的错误)。将数字转换为字符串(连接)或将字符串转换为数字(添加)x的类型是什么?此错误是由于您试图用字符串值添加整数值造成的。你必须确保“+”运算的所有操作数都是同一类型的,如果你想添加它们,则是整数,如果你想连接它们,则是字符串。不要认为,这是一个字符串。他在终端中输入1,但我认为它是作为字符串读取的。但是不确定。
argv
是一个字符串列表,其中包含运行文件的人给出的参数,例如
python myfile a b c
,在这种情况下
argv=['a','b','c']
。这取决于你如何解释这些值。所以你认为它在这里被解读为一个整数…你真的测试过它吗?有趣!不,
x
被读取为字符串,您必须将其转换为int(就像您正在做的那样)