Как избавиться от break в коде по подсчету наценки в зависимости от суммы?
Написал мини программку для себя которая считает какую сумму с наценкой должен заплатить клиент.
Логика такая, если сумма заказа до 3000 то клиент платит наценку в зависимости от суммы (до 100, до 500 и до 3000) если более 3000 то наценка в зависимости от выбранного брэнда.
Программку я написал, она работает) Но код мне совсем не нравиться. Есть ли возможность как то обойти break которые мне пришлось использовать что бы дальше условия не проверялись? и вообще как все сделать по красивее (но не усложнять слишком сильно разными библиотеками)
def percent(num, divider):
i = num/100*divider
i = num+i
return i
data, brand = int(input('Введите цену: ')), int(input('Введите брэнд: (1 = FOBI)'
' (2 = Knox) (3 = PRAM)'
' (4 = LOFE): '))
while(True):
if data <= int(100):
print(percent(data, 300))
break
if data <= 500:
print(percent(data, 150))
break
if data <= 3000:
print(percent(data, 80))
break
if brand == 1:
print(percent(data, 5))
break
if brand == 2:
print(percent(data, 17))
break
if brand == 3:
print(percent(data, 25))
break
if brand == 4:
print(percent(data, 11))
break
Ответы (3 шт):
Со второй частью просто:
brand_coeff = {
1: 5,
2: 17,
3: 25,
4: 11,
}
print(percent(data, brand_coeff[brand]))
С первой немного сложнее, не уверен, что это короче и понятнее, чем if-ы:
data_coeff = [(100, 300), (500, 150), (3000, 80)]
coeff = None
while n, k in data_coeff:
if data <= n:
coeff = k
break
if coeff:
print(percent(data, coeff))
Ещё обратите внимание, что функция percent у вас явно криво написана - вы перезаписываете переменную i, в результате divider вообще не используется.
def get_percent(price, multiply):
return price + price / 100 * multiply
def calc(price, brand):
coefficient = {
1: 5,
2: 17,
3: 25,
4: 11,
}
if price <= 100:
return get_percent(price, 300)
if price <= 500:
return get_percent(price, 150)
if price <= 3000:
return get_percent(price, 80)
return get_percent(price, coefficient[brand])
if __name__ == '__main__':
price = int(input('Введите цену: '))
brand = int(input('Введите брэнд: (1 = FOBI) (2 = Knox) (3 = PRAM) (4 = LOFE): '))
print(calc(price, brand))
Зачем тут цикл, абсолютно не понятно, типа цикл идёт ровно до первого условия, а значит проходит 1 раз максимум, и он тут просто без надобности
вы можете переписать свои условия еще вот так:
def percent(num, divider):
return num + num/100*divider
data = int(input('Введите цену: '))
brand = int(input('Введите брэнд: (1 = FOBI) (2 = Knox) (3 = PRAM) (4 = LOFE): '))
if data>3000:
print(percent(data, (0,5,17,25,11)[brand]))
else:
print(percent(data, 80 if data>500 else 150 if data>100 else 300))