Python 'For' Loop Iterate Array - PullRequest
       1

Python 'For' Loop Iterate Array

0 голосов
/ 21 сентября 2018

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

Ответы [ 5 ]

0 голосов
/ 22 сентября 2018

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

Я бы передал начальную цену в функцию, так же, как вы передаете список названий дней.Я также использовал .format, поэтому мы печатаем цены в долларах и центах.Это влияет только на то, как распечатывается цена, но не влияет на фактическое значение, поэтому мы не теряем никакой точности.

Я также немного изменил ваши имена, чтобы они соответствовали обычному Python PEP-0008 стиль.

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 голосов
/ 21 сентября 2018

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

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)
0 голосов
/ 21 сентября 2018

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

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 голосов
/ 21 сентября 2018

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

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 голосов
/ 21 сентября 2018

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

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

for day in array:
    price = price - (price * .1)
    print(day, price)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...