Mi optimización está destinada a imprimir ciclos pero imprime error de tipo.

Además, ¿cómo puedo hacer mucho? Quiero una variable que multiplique las cosas por 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)
-1
user13957601 19 jul. 2020 a las 13:56

3 respuestas

Obtiene un TypeError porque running es un tuple y los otros son int s. Según los comentarios, parece que desea agregar los valores.

running = burncalories * 10 + destroyknees  # score 700

Ahora, si desea que imprima cycling en lugar de 800, podemos usar tuplas:

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

print(best_one)

Esto funciona porque comparar tuplas las compara una por una, deteniéndose en la primera que no es igual: (1, 'something') < (2, 'something else')

0
Jasmijn 19 jul. 2020 a las 11:06

Su código no funcionaba porque intentaba pasar tuplas a la función max. Además, intentaba obtener el valor máximo, no la cadena relacionada con este valor. He usado un diccionario para que funcione:

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)
0
David Duran 19 jul. 2020 a las 11:12

El resultado impreso es una tupla:

(1000, -300)

Esto es causado por la inicialización de la variable: running = (burncalories * 10, destroyknees) Esto inicializa running como tal: running = (1000, -300) Para calcular el valor numérico de la ejecución, la inicialización debe escribirse con un operador +:

running = (burncalories * 10 + destroyknees)

Segunda pregunta:

Además, ¿cómo puedo hacer mucho? Quiero una variable que multiplique las cosas por 3.

Está buscando operar con un valor dado. La forma más sencilla de hacerlo es con una función.

def verybadFunc(num):
    return num * 3

print(verybadFunc(bestone))
0
Yair Feldman 19 jul. 2020 a las 15:05