воскресенье, 17 ноября 2013 г.
среда, 13 ноября 2013 г.
вторник, 12 ноября 2013 г.
понедельник, 11 ноября 2013 г.
2. Поделка для сына. Шоппинг.
Сруб я собирался делать с рубкой углов "в чашу". Поэтому обдумывал, каким инструментом это можно сделать.
Первое, что пришло в голову, это использовать напильник круглого сечения со средней насечкой, с диаметром, примерно равным диаметру бревна. Но в строительном магазине я нашел более интересное решение, это дремель с подходящими насадками.
![]() |
Рубка стен "в чашу". |
четверг, 7 ноября 2013 г.
1. Поделка для сына. Начало.
Как-то раз обрадовали нас с сыном в детском саду тем, что нужно сделать поделку к празднику осени. Пока шли домой я все думал чего же интересного сделать. Картинки из листочков склеить? Пластелиновых зверюшек с теми же листочками, веточками и орешками? Большинство родителей со своими детьми примерно такие поделки и делают. Видимо потому что, как правило, в поделках участвуют мамы. :) В общем, решил я делать что-то немного серьезнее, а именно, домик с небольшим участком, построенный почти по правилам большой стройки. Ну почти... :) Посоветовался с сыном, он одобрил и пошел его рисовать.
Дружно мы взялись за дело и работа закипела!
воскресенье, 18 августа 2013 г.
Проверка существования ключа в словаре.
Обработка исключений
try: d[key] = d[key] + 1 except KeyError: d[key] = 1
Метод has_key
if d.has_key(key): d[key] = d[key] + 1 else: d[key] = 1
Метод setdefault
d[key] = d.setdefault(key, 0) + 1
Метод get
d[key] = d.get(key, 0) + 1
Оператор in
if key in d: d[key] = d[key] + 1 else: d[key] = 1
- Если предполагается почти 100% существование ключей в словаре, то инструкция try except будет самой эффективной на любом наборе данных.
- Если искомый ключ часто не существует, то инструкция try except окажется самой медленной из возможных решений.
- Метод has_key эффективно работает с небольшими наборами данных, на больших ведет себя хуже.
- Методы setdefault и get почти одинаковы по скорости, setdefault незначительно выигрывает.
- Хорошие показатели достигаются с оператором in и на маленьких и на больших наборах данных.
Если есть сомнения что лучше выбрать в конкретной ситуации, лучше использовать оператор in.
А еще лучше - тестировать.
Информацию нашел здесь http://wiki.gungfu.de/Main/PythonIdioms
По этой ссылке полное описание тестов с результатами.
понедельник, 24 июня 2013 г.
Pattern. Singleton (Одиночка).
Одиночка (англ. Singleton) в программировании — порождающий шаблон проектирования.
Гарантирует, что у класса есть только один экземпляр, и предоставляет к нему глобальную точку доступа.
Гарантирует, что у класса есть только один экземпляр, и предоставляет к нему глобальную точку доступа.
class Singleton(object): __instance = None def __new__(cls): if cls.__instance is None: cls.__instance = super(C, cls).__new__(cls) else: cls.__init__ = lambda x: None return cls.__instance
Просмотрел массу решений, в том числе отсуда. В итоге больше понравилось одно из этих, его и опубликовал с небольшими изменениями.
UPD: А вот так еще краше получилось
class Singleton(object): def __new__(cls): if not hasattr(cls, 'instance'): cls.instance = super(Singleton, cls).__new__(cls) else: cls.__init__ = lambda x: None return cls.instance
среда, 17 апреля 2013 г.
Checkio. Домашний пароль.
Сделать проверку безопасности пароля. Пароль будет считаться достаточно сильным, если его длина больше или равна 10 символам, имеет хотя бы одну цифру, одну букву верхнего регистра, и одну строчную.
Input: Строка, которая является паролем.
Output: True, если пароль безопасен.
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).
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. Предложение с лишними пробелами.
Дается строка в виде предложения. Удалить все лишние пробелы.
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')
Подписаться на:
Сообщения (Atom)