簡體   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