调用max函数遇TypeError的原因及乘法变量very的创建问题
问题分析与解决方案
让我一步步帮你解决代码里的两个核心问题:
1. 修复very变量的定义问题
你想要的very是一个能把输入数值乘以3的工具——但普通变量只能存储固定值,所以这里应该定义成函数(或者更简洁的lambda表达式),才能实现“动态将数值乘3”的功能:
# 方法1:常规函数定义 def very(x): return 3 * x # 方法2:简洁的lambda表达式(适合简单逻辑) very = lambda x: 3 * x
如果你的需求只是需要一个固定的乘数3,那直接写very = 3也可以,比如verybad = very * bad就能得到和3 * bad一样的结果。
2. 解决max函数的TypeError并输出cycling
你的代码里藏着一个类型不匹配的坑:running是一个元组(因为用逗号分隔了两个值),而cycling和walking是单个整数(括号里只有一个值时,Python会自动忽略括号,它们本质是int类型)。当max函数尝试比较元组和整数时,就会抛出TypeError——不同类型的对象不能直接比较大小。
结合你注释里的分数逻辑(running得700、cycling得800、walking得200),修复后的完整代码如下:
good = 100 bad = -100 verybad = 3 * bad burncalories = good destroyknees = verybad # 实现“将数值乘以3”的very函数 very = lambda x: 3 * x # 统一所有运动的分数为单个数值 running = burncalories * 10 + destroyknees # 100*10 + (-300) = 700 cycling = burncalories * 8 # 800 walking = burncalories * 2 # 200 # 如果只想输出最高分数 best_score = max(running, walking, cycling) # 如果想直接输出对应的运动名称(比如cycling),用字典映射更直观 sport_scores = { "running": running, "cycling": cycling, "walking": walking } best_sport = max(sport_scores, key=sport_scores.get) print(best_sport) # 输出 cycling print(best_score) # 输出 800
关键修复点:
- 把
running从元组改成了单个计算后的分数,确保所有传入max的参数都是整数类型; - 用字典映射分数和运动名称,能直接输出你想要的
cycling,而不是单纯的分数值。
内容的提问来源于stack exchange,提问作者user13957601
相关产品推荐
相关产品推荐

