Как избавиться от 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 шт):

Автор решения: CrazyElf

Со второй частью просто:

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 раз максимум, и он тут просто без надобности

→ Ссылка
Автор решения: SergFSM

вы можете переписать свои условия еще вот так:

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))
→ Ссылка