为什么调用max函数时会出现TypeError?

2024-10-01 15:31:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我的优化是为了打印循环,但它打印类型错误

我又怎么能做得很好呢?我想要一个变量,它可以将事物乘以3

good = 100
bad = -100
verybad = 3 * bad

burncalories = good

destroyknees = verybad

# ALSO THIS DOESN'T WORK
# very = 3 * 
# destroyknees = very bad


running = (burncalories * 10, destroyknees)  # score 700

cycling = (burncalories * 8)  # score 800

walking = (burncalories * 2)  # score 200

bestone = max(running, walking, cycling)

print(bestone)

Tags: 类型错误runningvery事物alsoscorebad
3条回答

My optimization is meant to print cycling but it prints type error.

这里有两个错误:

  • 您正在混合不相关的类型-cyclingwalking属于int类型,而running是两个元素的元组;也许你是想做running = burncalories * 10 + destroyknees
  • max操作的是,而不是变量,因此它将返回最大,而不是变量名(一旦代码运行,变量名就没有真正的一致性)

要获得您想要的结果,您需要将名称放在要最大化的值内。一个简单的方法是让你的“活动”由一个元组组成,例如(value, name)。然后,对这些值执行max操作将返回一对(value, name),您可以打印其中的第二个元素。为了避免重复,您可以将它们全部放在一个列表中,如下所示:

activities = [
    (burncalories * 10 + destroyknees, "running"),
    (burncalories * 8, "cycling"),
    (burncalories * 2, "walking")
]

value,activity = max(activities)
print(activity, ":", value)

可选地,您可以使用^ {< CD11>}将活动的名称与值关联,并执行^ {< CD6>},通过^ {< CD13>}参数指定要考虑的字段。

activities = {
    "running": burncalories * 10 + destroyknees,
    "cycling": burncalories * 8,
    "walking": burncalories * 2
}

activity,value = max(activities.items(), key = lambda kv: kv[1])
print(activity, ":", value)

(^ {CD14>})返回一个包含在{{CD16>}字典中的^ {< CD15>}对的序列;^ {< CD13>}参数是由^ {CD6>}调用的函数,要求每个元素在^ {CD6>}操作中考虑什么值;^ {CD20>}是lambda函数,接收^ {CD15>}元组并返回值部分)

对于更复杂的情况,一个成熟的Activity类可能更可取


Also how can I do very? I want a variable that multiplies things by 3.

这不是语言的工作方式,变量存储值,它们不像宏那样充当文本替换。在Python中可以做的最类似的事情是创建一个函数

def very(value):
    return 3 * value


destroyknees = very(bad)

但我认为这并不是对代码的真正改进

您的代码无法工作,因为您试图将元组传递给max函数。此外,您试图获取最大值,而不是与此值相关的字符串。我使用了一本字典使它起作用:

import operator

good = 100
bad = -100
verybad = 3 * bad

burncalories = good

destroyknees = verybad

# ALSO THIS DOESN'T WORK
# very = 3 * 
# destroyknees = very bad


running = burncalories * 10 + destroyknees  # score 700

cycling = burncalories * 8  # score 800

walking = burncalories * 2  # score 200

dict_sport = {"running": running, "cycling": cycling, "walking": walking}
bestone=max(dict_sport.items(), key=operator.itemgetter(1))[0]

print(bestone)

你得到一个TypeError,因为running是一个tuple,其他的是int。从注释来看,您似乎想要添加这些值

running = burncalories * 10 + destroyknees  # score 700

现在,如果您希望它打印cycling而不是800,我们可以使用元组:

best_value, best_one = max((running, "running"), (walking, "walking"), (cycling, "cycling"))

print(best_one)

这是可行的,因为比较元组会一个接一个地比较它们,在第一个不相等的元组处停止:(1, 'something') < (2, 'something else')

相关问题 更多 >

    热门问题