求问:初学python的简单问题 函数的返回值
我想用return一次性返回两个值 为什么出错?如何改?
#代码:
python
a,b=input('input a and b with blank:').split(",")
print(a,b)
def xyz(a,b):
return a+b,a-b
r=xyz(a,b)
print(r)
#出错提示
Traceback (most recent call last):
File "D:\py_nextwork\demo2\demo_3.py", line 198, in <module>
r=xyz(a,b)
^^^^^^^^
File "D:\py_nextwork\demo2\demo_3.py", line 197, in xyz
return a+b,a-b
~^~
TypeError: unsupported operand type(s) for -: 'str' and 'str'
字符串不支持相减,相加是可以的
问题描述:在Python中,当使用函数返回多个值时,如果函数内的操作不当,可能会出现类型错误的问题。
原因:在函数xyz中,输入的a和b是字符串类型,而在return语句中,使用了加法和减法运算符。因此,Python无法对两个字符串类型的变量执行加法和减法运算。
解决方法:将输入的a和b转换为整数或浮点数类型,以便进行加法和减法运算。可以使用int()或float()函数将字符串转换为整数或浮点数。修改后的代码如下所示:
a, b = input('input a and b with blank:').split(",")
print(a, b)
def xyz(a, b):
a = int(a) //转换类型为int
b = int(b) //转换类型为int
return a+b, a-b
r = xyz(a, b)
print(r)
可以优化代码:可以在函数定义时指定参数类型,以避免在函数内部出现类型错误。可以使用类型提示或assert语句来实现。修改后的代码如下所示:
def xyz(a: int, b: int) -> tuple[int, int]:
assert isinstance(a, int) and isinstance(b, int), "a and b must be integers."
return a+b, a-b
这样,在函数调用时,如果输入的参数类型不是整数,会抛出AssertionError异常,从而避免了类型错误的问题。
input得到的是字符串
split之后得到一个list,里面的元素依然是字符串
字符串相加是拼接,不是加法,字符串不支持相减
所以你应该改为return int(a)+int(b),int(a)-int(b)