TypeError: 只能将 str(而不是“NoneType”)与 str 连接

9
尝试在 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' 类型错误的答案和另一个关于 str to str 的 答案,但是我无法将它与我的代码联系起来。如果有人能够解释我做错了什么,那就太好了!


字符串 = 字符串 + 转换字符(字符) 这是错误的。convertChar的定义也不完整(提示:如果if语句没有执行会发生什么?) - cs95
1
在函数covertChar中,你进行了一个检查:if char >= 'A' and char <= 'Z': 如果为真,则执行某些操作并返回结果。但如果为假呢?Python默认情况下会返回None,如果没有遇到返回值的话。 - Sreeram TP
3个回答

5

你需要为你的代码添加一些异常情况处理。首先,如果输入的字符已经是小写字母怎么办?

你可以按照以下方式处理:

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

    return char

这可能不是最理想的解决方案,但它可以处理大部分情况。也就是说,只有输入的字符是大写字母时,它才会转换为小写字母。对于所有其他情况(无论是小写字母、数字等),字符将原样返回。

其次,如果你正在制作一个大写转小写的转换器,HElLo的输出应该是hello,而不是HElLohello

为此,需要修改第二个函数如下:

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

最后,您可能想考虑使用内置函数.upper()

使用示例:

'HeLlo'.upper()


1
如 coldspeed 所评论的,当您将小写字母传递给 convertChar 时,该函数将不会返回正确的字符。因此出现错误。
另外,使用 'string = string + convertChar(char)' 您正在附加到同一输入字符串。这是错误的。您需要使用一个新的空字符串。

0

我不知道你建立自己的方法的原因,但是你可以使用内置的lower()方法。例如:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接