Python 'For' Loop Iterate Array

1

Я новичок в 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% от предыдущего дня, будет полезна. Спасибо

  • 2
    price = price - (price * .1);print(day, price)
  • 0
    «Мне нужно рассчитать цену со скидкой на основе цены со скидкой предыдущих дней в массиве». Хорошо, но этот код просто использует массив (на самом деле, это список) для названий дней, но похоже, что вы также должны использовать его и для сниженных цен. Как показывают ответы ниже, на самом деле это вам не нужно , но, возможно, смысл этого упражнения в том, чтобы создать список, который будет содержать цену со скидкой на каждый день.
Показать ещё 5 комментариев
Теги:
loops

5 ответов

2
Лучший ответ

Ваш код, как написано, близок:

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 каждую итерацию, что приводило к желаемому поведению.

  • 0
    Всем очень полезная бета. Ценю понимание.
1

Если вы хотите придерживаться функции, как в вашем коде, выполните одно из следующих действий:

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
0

Ваш код довольно близок, но в каждый день вам нужно изменить цену предыдущего дня.

Я бы передал стартовую цену в функцию, точно так же, как вы передали список имен дня. Я также использовал .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
0

Вы не меняете стоимость price поэтому один и тот же результат рассчитывается на каждой итерации цикла.

Это должно работать:

for day in array:
    price = price - (price * .1)
    print(day, price)
  • 1
    Было бы лучше рассчитать цену, используя price = price * 0.9
  • 0
    Дает UnboundLocalError: local variable 'price' referenced before assignment . Если я использую global price внутри функции и перед циклом for в качестве одного из ответов ниже, это работает
Показать ещё 1 комментарий
0

Вы можете использовать глобальные и поддерживать свою логику, поскольку она

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)
  • 2
    Вы можете использовать global для этого, но это не должно поощряться. Модифицируемые глобалы нарушают модульность программы. Для такой крошечной программы это не имеет большого значения, но это плохая привычка.
  • 0
    Я обычно не фанат использования global, но в этом случае я считаю, что окончательная цена должна быть результатом итераций в том смысле, что она снизится в 7 раз по сравнению с первоначальной ценой и сможет потреблять позже.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню