簡體   English   中英

類型錯誤:只能將 str(不是“NoneType”)連接到 str

[英]TypeError: can only concatenate str (not “NoneType”) to str

嘗試在 Python 3.7 中構建大寫到小寫字符串轉換器,這是我的代碼:

def convertChar(char):
    if char >= 'A' and char <= 'Z':
        return chr(ord(char) + 32)
def toLowerCase(string):
    for char in string:
        string = string + convertChar(char)
    return string
string = input("Enter string - ")
result = toLowerCase(string)
print(result)

這是我的輸出:

Enter string - HELlo
Traceback (most recent call last):
  File "loweralph.py", line 11, in <module>
    string = toLowerCase(result)
  File "loweralph.py", line 6, in toLowerCase
    result = result + convertChar(char)
TypeError: can only concatenate str (not "NoneType") to str

我對 Python 真的很陌生,我看到了“list to list”TypeErrors 的答案和 str to str 的另一個答案,但我無法將它與我的代碼相關聯。 如果有人能解釋我做錯了什么,那就太好了!

您需要在代碼中添加一些異常情況。 首先,如果輸入的字符已經是小寫怎么辦?

你可以做這樣的事情:

def convertChar(char):
    if char >= 'A' and char <= 'Z':
        return chr(ord(char) + 32)

    return char

這可能不是最理想的解決方案,但它會處理大部分事情。 也就是說,只有輸入的字符是大寫的,才會轉換為小寫。 對於所有其他情況(無論是小寫字符、數字等),字符將按原樣返回。

其次,如果您正在制作大HElLo小寫的轉換器,則HElLo輸出應該是hello ,而不是HElLohello

為此,您需要按如下方式修改第二個函數:

def toLowerCase(string):
    newString = []
    for char in string:
        newString.append(convertChar(char))
    return ''.join(newString)

最后,您可能需要考慮使用.upper()內置函數。

用法示例:

'你好'.upper()

正如coldspeed所評論的,當您將小寫字母傳遞給convertChar時,該函數將不會返回正確的字符。 因此錯誤。

此外,使用 'string = string + convertChar(char)' 您附加到相同的輸入字符串。 這是錯誤的。 您需要為此使用一個新的空字符串。

我不知道構建自己的方法的原因,但您可以改用內置的 lower() 方法。 例如:

my_string = input("Enter string - ")
result = my_string.lower()
print(result)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM