Я новичок в python, и я ищу некоторую помощь в структурах циклов, в частности, как использовать цикл "For" или альтернативный цикл для решения проблемы. Мне нужно определить скидку на основе скидки на предыдущие дни в массиве, поэтому она будет проходить через массив и применить 10% скидку. Вот что я имею до сих пор:
opnDays = ["mon", "tue", "wed", "thr", "fri"]
price = 10
def discount(array):
for day in array:
disPrice = price - (price * .1)
print(day, disPrice)
discount(opnDays)
>>>
mon 9.0
tue 9.0
wed 9.0
thr 9.0
fri 9.0
Я хочу получить:
>>>
mon 9.0
tue 8.1
wed 7.29
thr 6.561
fri 5.9109
Любая помощь в том, как организовать этот цикл, чтобы получить скидку 10% от предыдущего дня, будет полезна. Спасибо
Ваш код, как написано, близок:
opnDays = ["mon", "tue", "wed", "thr", "fri"]
price = 10
def discount(array):
disPrice = price
for day in array:
disPrice *= 0.9
print(day, disPrice)
Что я сделал здесь, так это изменение того, как disPrice
был установлен в вашем цикле. Вы устанавливали его на одно и то же значение (0.9 * price
) на каждой итерации. Все, что я сделал, было установлено, чтобы price
начиналась и умножалась на 0.9
каждую итерацию, что приводило к желаемому поведению.
Если вы хотите придерживаться функции, как в вашем коде, выполните одно из следующих действий:
opnDays = ["mon", "tue", "wed", "thr", "fri"]
price = 10
def discount(array):
disPrice = price # assign initial price to discount
for day in array:
disPrice = disPrice*0.9 # Reduce the discount by 10 percent every time
print(day, disPrice)
discount(opnDays)
Выход
mon 9.0
tue 8.1
wed 7.29
thr 6.561
fri 5.9049000000000005
Ваш код довольно близок, но в каждый день вам нужно изменить цену предыдущего дня.
Я бы передал стартовую цену в функцию, точно так же, как вы передали список имен дня. Я также использовал .format
, поэтому мы печатаем цены как доллары и центы. Это влияет только на то, как печатается цена, она не влияет на фактическое значение, поэтому мы не теряем никакой точности.
Я также немного изменил ваши имена, чтобы они соответствовали обычному стилю PEP-0008 Python.
def discount(array, price):
for day in array:
price = price - (price * .1)
print("{}: {:.2f}".format(day, price))
open_days = ["mon", "tue", "wed", "thr", "fri"]
start_price = 10.00
discount(open_days, start_price)
выход
mon: 9.00
tue: 8.10
wed: 7.29
thr: 6.56
fri: 5.90
Вы не меняете стоимость price
поэтому один и тот же результат рассчитывается на каждой итерации цикла.
Это должно работать:
for day in array:
price = price - (price * .1)
print(day, price)
price = price * 0.9
UnboundLocalError: local variable 'price' referenced before assignment
. Если я использую global price
внутри функции и перед циклом for в качестве одного из ответов ниже, это работает
Вы можете использовать глобальные и поддерживать свою логику, поскольку она
opnDays = ["mon", "tue", "wed", "thr", "fri"]
price = 10
def discount(array):
global price
for day in array:
price = price - (price * .1)
print(day, price)
discount(opnDays)
Чтобы избежать global
перехода цены в качестве аргумента и предпочтительного подхода
opnDays = ["mon", "tue", "wed", "thr", "fri"]
price = 10
def discount(array,price):
for day in array:
price = price - (price * .1)
print(day, round(price,2))
discount(opnDays,price)
Если вам нужна конечная цена после последовательных итераций, которые, я считаю, могут быть для вас требованием
opnDays = ["mon", "tue", "wed", "thr", "fri"]
price = 10
def discount(array,price):
for day in array:
price = price - (price * .1)
print(day, round(price,2))
return price
final_price = discount(opnDays,price)
print(final_price)
global
для этого, но это не должно поощряться. Модифицируемые глобалы нарушают модульность программы. Для такой крошечной программы это не имеет большого значения, но это плохая привычка.
price = price - (price * .1);print(day, price)