TypeError: unsupported operand type(s) for -: ‘str’ and ‘int’
这段代码是在Taking a Vacation中的“Plan Your Trip!”小节
按照要求,我定义了4个函数,程序流程是这样的:
1. 分别赋3个值给变量city,days和spending_money
2. 用这3个变量调用函数trip_cost()
3. 在函数trip_cost()中返回旅行的总花费,包括住宿费用,飞机费用和租车费用,这些费用用另外3个函数计算
def hotel_cost(nights): return nights*140 def plane_ride_cost(city): if city == "Charlotte": return 183 elif city == "Tampa": return 220 elif city == "Pittsburgh": return 222 elif city == "Los Angeles": return 475 def rental_car_cost(days): if days < 3: #不管是str或者int,都可以跟3进行对比 return days*40 elif days >= 3 and days < 7: return days*40-20 elif days >= 7: return days*40-50 #<---20 def trip_cost(city, days, spending_money): a = hotel_cost(days) b = plane_ride_cost(city) c = rental_car_cost(days) #<---25 return (a + b + c + spending_money) city=raw_input("Please provide city that you want to trip:") days=raw_input("How many days you need to live and rent car:") spending_money=raw_input("Other money spending:") print trip_cost(city, days, spending_money) #<---31
看上去没什么问题,但执行时发现出现如下报错:
x-mac:python frank$ python trip.py Please provide city that you want to trip:Tampa How many days you need to live and rent car:8 Other money spending:1000 Traceback (most recent call last): File "trip.py", line 31, in print trip_cost(city, days, spending_money) File "trip.py", line 25, in trip_cost c = rental_car_cost(days) File "trip.py", line 20, in rental_car_cost return days*40-50 TypeError: unsupported operand type(s) for -: 'str' and 'int'
这是什么问题?
我尝试单独调用这3个子函数,发现没有任何问题,只要调用主函数trip_cost()就会有问题。。。
又测试了下,发现只要用raw_input才会有问题,如果不用raw_input,直接赋值打印“print trip_cost(“Tampa”, 8, 1000)”,也不会有问题!?
经过测试和google,终于发现了问题,raw_input() 得到的是字符串str,不是数字int;而在rental_car_cost()中,返回值需要计算,str不能跟int计算,所以必须转换str为int才可以。在调用函数时,只要这么调用就可以了:
print trip_cost(city, int(days), int(spending_money))
结果:
x-mac:python frank$ python trip.py Please provide city that you want to trip:Tampa How many days you need to live and rent car:8 Other money spending:1000 2610本文出自 Frank's Blog
版权声明:
本文链接:TypeError: unsupported operand type(s) for -: ‘str’ and ‘int’
版权声明:本文为原创文章,仅代表个人观点,版权归 Frank Zhao 所有,转载时请注明本文出处及文章链接