Список sys.argv
дает вам список строк, и когда вы делаете x = argv[1]
, x становится строкой.
Теперь, когда вы пытаетесь сделать lower = (((ord(n[i]) - 97 + x) % 26)) + 97
, вы пытаетесь добавитьinteger и строка, что невозможно, поэтому единственное изменение, которое вам нужно сделать в своем коде, - убедиться, что вводимый вами 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