вторник, 16 апреля 2013 г.

Checkio. Банкомат.

Input: Список целых чисел: первое значение означает баланс счета, второе значение является списком сумм, которые требуется снять.
Output: Баланс счета после всех операций (integer).
# Withdraw without any incident
# 120 - 10 - 0.5 - 1% (10*0.01) = floor(109.4) = 109
# 109 - 20 - 0.5 - 1% (20*0.01) = floor(88.3) = 88
# 88 - 30 - 0.5 - 1%(30*0.01) = floor(57.2) = 57
checkio([120, [10, 20, 30]]) == 57
checkio([120, [200, 10]]) == 109
checkio([120,[3, 10]]) == 109
checkio([120, [200 , 119]]) == 120
checkio([120, [120, 10, 122, 2, 10, 10, 30, 1]]) == 56
Решение:
from math import floor

def checkio(data):
    balance, withdrawal = data

    for withdraw in withdrawal:
        if not withdraw % 5 and withdraw > 0:
            new_balance = floor(balance - withdraw - 
                                0.5 - withdraw * 0.01)
        else:
            continue

        if new_balance >= 0:
            balance = new_balance

    return int(balance)


if __name__ == '__main__':
    assert checkio([120, [10 , 20, 30]]) == 57, 'First'

    # With one Insufficient Funds, and then withdraw 10 $
    assert checkio([120, [200 , 10]]) == 109, 'Second'

    #with one incorrect amount
    assert checkio([120, [3, 10]]) == 109, 'Third'

    assert checkio([120, [200, 119]]) == 120 , 'Fourth'

    assert checkio([120, [120, 10, 122, 2, 10, 10, 30, 1]]) == 56, "It's mixed all base tests"
    
    print('All Ok')

Комментариев нет:

Отправить комментарий