Optimisation

Fermé
Benjosss - 31 juil. 2021 à 23:30
NHenry Messages postés 15163 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 1 novembre 2024 - 1 août 2021 à 10:40
Bonjour,

Je suis débutant en python en je voudrais savoir comment réduire toutes ces lignes (si possible)..

Merci :)


price = 0

if (engine_displacement <= 50):
price =+ 5

if (engine_displacement > 50) and (engine_displacement <= 125):
price =+ 6

if (engine_displacement > 125) and (engine_displacement <= 250):
price =+ 7

if (engine_displacement > 250) and (engine_displacement <= 300):
price =+ 8

if (engine_displacement > 300) and (engine_displacement <= 450):
price =+ 9

if (engine_displacement > 450) and (engine_displacement <= 500):
price =+ 10

if (engine_displacement > 500) and (engine_displacement <= 690):
price =+ 11

if (engine_displacement > 690) and (engine_displacement <= 700):
price =+ 12

if (engine_displacement > 700) and (engine_displacement <= 800):
price =+ 13

if (engine_displacement > 800) and (engine_displacement <= 900):
price =+ 14

if (engine_displacement > 900) and (engine_displacement <= 1000):
price =+ 16

if (engine_displacement > 1000) and (engine_displacement <= 10000):
price =+ 18


print(price)
A voir également:

1 réponse

Bonsoir,

Comme toujours avec ce genre de chose, conteneur comme list ou tuple combiné à une simple boucle.

Dans ton code, tu aurais déjà dû utiliser des elif, et également gérer le cas où ta valeur est hors limite.

Ce qui pourrait donner par exemple :

def get_price(v, min_price=0):
    prices = ((50, 5), (125, 6), (250, 7), (300, 8), (450, 9), (500, 10),
    (690, 11), (700, 12), (800, 13), (900, 14), (1_000, 16), (10_000, 16),)
    # Parcours du tuple de la fin vers le début
    for i in range(len(prices)-1, -1, -1):
        # Si 1er élément du tuple, on prend la valeur de min_price
        p_min = prices[i-1][0] if i > 0 else min_price
        # Oui, on peut faire ça en python =D
        if p_min < v <= prices[i][0]:
            return prices[i][1]
    # On lance une erreur si valeur hors plages
    error = f'Invalid value, got {v}, min is {min_price}, max is {prices[-1][0]}'
    raise ValueError(error)

# On teste un peu cette jolie fonction
for engine_displacement in (100_564, 564, 125, -56):
    print(engine_displacement, end=': ')
    try:
        print(get_price(engine_displacement))
    except ValueError as er:
        print(er)


Bon, c'est sans doute un peu compliqué si tu es totalement débutant, mais pas tant que ça.
0
Super merci à toi sa m’aideras surement : )
0
NHenry Messages postés 15163 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 1 novembre 2024 343
1 août 2021 à 10:40
Vu que tu fais un return quand l'occurente est bonne, pas besoin de faire un double check
 if v <= prices[i][0]:

est suffisant, il faut juste que la liste soir triée.
0