среда, 17 апреля 2013 г.

Checkio. Домашний пароль.

Сделать проверку безопасности пароля. Пароль будет считаться достаточно сильным, если его длина больше или равна 10 символам, имеет хотя бы одну цифру, одну букву верхнего регистра, и одну строчную.

Input: Строка, которая является паролем.
Output: True, если пароль безопасен.

checkio('A1213pokl')==False
checkio('bAse730onE')==True
checkio('asasasasasasasaas')==False
checkio('QWERTYqwerty')==False
checkio('123456123456')==False
checkio('QwErTy911poqqqq')==True
Решение:
import re

def checkio(data):
    'Return True if password strong and False if not'
    c = re.compile(r'(?=.{10,})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])')
    return bool(c.match(data))
    

if __name__ == '__main__':
    assert checkio('A1213pokl')==False, 'First'
    assert checkio('bAse730onE4')==True, 'Second'
    assert checkio('asasasasasasasaas')==False, 'Third'
    assert checkio('QWERTYqwerty')==False, 'Fourth'
    assert checkio('123456123456')==False, 'Fifth'
    assert checkio('QwErTy911poqqqq')==True, 'Sixth'
    print('All ok')

вторник, 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')

Checkio. Предложение с лишними пробелами.

Дается строка в виде предложения. Удалить все лишние пробелы.

Input: Предложение в строковой переменной.
Output: Предложение без лишних пробелов.
checkio('I  like   python') == "I like python"
Решение:
def checkio(string):
    'return sentence without extra spaces'
    while string.find('  ') != -1:
        string = string.replace('  ', ' ')
    return string


if __name__ == '__main__':
    assert checkio('I  like   python') == "I like python", 'First'
    print('All ok')