Python problem with TypeError: unsupported operand type(s) for +: 'int' and 'str'
Python problem with TypeError: unsupported operand type(s) for +: 'int' and 'str'
我是整个编程世界的新手,我在做 cs50 的凯撒练习时遇到了 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="")
预计在终端 window 中:
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
是一个字符串。将 argv[1]
替换为 int(argv[1])
.
您正试图以数学方式将一个整数和一个字符串或一段文本相加。该文本可能看起来像一个“5”,但对计算机来说它是一个 字符 代表书面的 5,而不是文字数字 5。通常当某些东西需要用户输入时,例如 input()
或采用运行时参数,它默认将其作为类型 string
。
您需要 int()
或 float()
函数,以便 x = int(argv[1])
将字符串中的数字转换为实际数字。 (float() for decimal point's numbers aka "floating point")显然,如果你输入的不是数字,这些就会中断。
列表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
我是整个编程世界的新手,我在做 cs50 的凯撒练习时遇到了 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="")
预计在终端 window 中:
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
是一个字符串。将 argv[1]
替换为 int(argv[1])
.
您正试图以数学方式将一个整数和一个字符串或一段文本相加。该文本可能看起来像一个“5”,但对计算机来说它是一个 字符 代表书面的 5,而不是文字数字 5。通常当某些东西需要用户输入时,例如 input()
或采用运行时参数,它默认将其作为类型 string
。
您需要 int()
或 float()
函数,以便 x = int(argv[1])
将字符串中的数字转换为实际数字。 (float() for decimal point's numbers aka "floating point")显然,如果你输入的不是数字,这些就会中断。
列表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