воскресенье, 29 декабря 2013 г.

Python добавление разделителей разрядов в числах

Задача: имеем на входе строку, слова в которой разделены пробелом. Если в строке попадается число, то вставляем точки как разделители разрядов. На выходе нужно получить строку.
Например: text =

'123456' => '123.456'
'333' => '333'
'9999999' => '9.999.999'
'123456 567890' => '123.456 567.890'
'price is 5799' => 'price is 5.799'
'he was born in 1966th' => 'he was born in 1966th'

вторник, 24 декабря 2013 г.

пятница, 20 декабря 2013 г.

Linux подключение дополнительного IP

Иногда нужно настроить новую железку с IP по-умолчанию не из моей сети. Для этого надо добавить новый сетевой интерфейс с адресом из сети железки.

для добавления
sudo ifconfig eth0:1 <IP>

для удаления
sudo ifconfig eth0:1 del <IP>
sudo ifconfig eth0:1 down

или после перезагрузки настройка пропадет
eth0:2  и т.д. аналогично можно добавлять еще интерфейсы

четверг, 19 декабря 2013 г.

Python создаём словарь из двух списков

Задача: из двух списков получить словарь, где первый список ключи словаря, второй - значения

key_dict = [1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000]
value_dict = ['I', 'IV', 'V', 'IX', 'X', 'XL', 'L', 'XC', 'C', 'CD', 'D', 'CM', 'M']
dict_out = {}

for x, y in zip(key_dict, value_dict):
    dict_out[x] = y

print dict_out
{1: 'I', 4: 'IV', 5: 'V', 9: 'IX', 10: 'X', 40: 'XL', 50: 'L', 90: 'XC', 100: 'C', 400: 'CD', 500: 'D', 900: 'CM', 1000: 'M'}
zip(key_dict, value_dict) создает список такого вида [(1, 'I'), (4, 'IV') ...]



суббота, 14 декабря 2013 г.

Python преобразовать список из [1, [2, 3], 4] в [1, 2, 3, 4]


Задача: преобразовать список из такого типа [1, [2, 3], 4]   в    [1, 2, 3, 4]

check_lst = [[[2]], [4, [5, 6, [6], 6, 6, 6]]]

def check(lst):
    check_bool = True
    out_lst = []
    copy_lst = list(lst)
    while check_bool:
        check_bool = False
        for i in copy_lst:            
            if isinstance(i, list):
                check_bool = True
                out_lst.extend(i)
            else:
                out_lst.append(i)
        if check_bool:
            copy_lst = list(out_lst)
            out_lst = []            
    return out_lst

print check(check_lst)

[2, 4, 5, 6, 6, 6, 6, 6]
Лучшее решение

пятница, 13 декабря 2013 г.

Python использование set с классом

Задача: создадим класс, создадим пустой set. Заполним set экземплярами созданного класса. Для примера пусть экземпляры будут случайным целым числом из диапазона 0-9. Теперь мы хотим удалить из set-а все экземпляры класса значения которых совпадают с "9" и "8"

Где это можно применить на практике? В gamedeveloping игра "Астероид", в set добавляем все летающие по экрану камни, пробегаемся по set-у и сверяем дистанцию между кораблем и камнями:
для этого вычисляем дистанцию между координатами центров фигур
>>> def dist(p, q):
>>>     return math.sqrt((p[0] - q[0]) ** 2 + (p[1] - q[1]) ** 2)
и вычитаем радиус корабля и радиус камня, если получившееся значение <= 0 значит столкновение, то добавляем экземпляр класса камень во временный set. После окончания обхода set-а с камнями - удаляем из этого set-а временный set (один или более камней при столкновении) и уменьшаем счетчик жизней кораблю.

четверг, 12 декабря 2013 г.

Инвайт для сайта по изучению языка Python


Инвайт для сайта по изучению языка Python в игровой форме с левелами и медальками. Мини - задачки представленные на этом сайте взяты оттуда. После решения задачки, можно посмотреть лучшие решения.

Python tic-tac-toe крестики-нолики 3Х3

Классические крестики нолики 3Х3. Функция должна возвращать в случае выигрыша символ победителя "Х" или "О". Если ничья (draw) - "D". На вход функции подается подобный 2-мерный массив список. Если клетка не заполнена, то символ "."

game_result = [
        u"OOX",
        u"XXO",
        u"OXX"]

Python преобразование числа [0-999] в текст

Например преобразовать 310 => three hundred ten

среда, 11 декабря 2013 г.

Python полезности для игры Астероид

Выход за границы области экрана
>>> self.pos[0] = (self.pos[0] + self.vel[0]) % WIDTH
>>> self.pos[1] = (self.pos[1] + self.vel[1]) % HEIGHT
pos - координаты центра движущейся фигуры

Увеличение скорости астероидов в зависимости от счета score
# increase rock's velocity using score
for rock in rock_group:
    for i in range(2):
        rock.vel[i] = rock.init_vel[i] + (rock.init_vel[i] * score * 0.03)
или
rock_vel[i] = rock_vel[i] * (1 + score / 3)

Столкновение спрайтов (p q - координаты центров сталкивающихся спрайтов, dist - расчет дистанции между спрайтами)
def dist(p, q):
    return math.sqrt((p[0] - q[0]) ** 2 + (p[1] - q[1]) ** 2) 

def collide(self, other_object):
        return dist(self.pos, other_object.pos) <= self.radius + other_object.radius

Python нахождение наиболее часто встречающейся буквы в тексте

Задача: нахождение наиболее часто встречающейся буквы в тексте (использование например в криптографии при дешифровке). Требуется:

  • ищем только буквы
  • нет зависимости от регистра ('a' и 'A' считаются одинаковой буквой)
  • ищем букву которая встречается максимальное количество раз
  • если таких букв несколько, то результат выдаем первую встречающуюся по алфавиту

Python set методы с наглядными рисунками

Не хватает графики для ясного понимания действий методов set. Хотелось бы как в SQL рисунки пересечений окружностей при работе с join. И вот попал на такой сайт . Выкладываю оттуда картинки.
Union |
>>> s1 = set([1, 2, 3])
>>> s2 = set([3, 4, 5])
>>> print s1.union(s2)
set([1, 2, 3, 4, 5])

Python проверка на сложность пароля

Например, установлены такие требования к паролю:


  • не меньше 8 символов
  • должна присутствовать хотя бы одна цифра [0-9]
  • должна присутствовать хотя бы одна заглавная буква [A-Z]
  • должна присутствовать хотя бы одна строчная буква [a-z]


вторник, 10 декабря 2013 г.

Ошибка "Служба временно недоступна, попробуйте позже" при входе в Семейную безопасность

В составе пакета Windows Live есть Семейная безопасность. Ее можно использовать для ограничения доступа к сайтам, как полное ограничение с входом только на сайты входящие в белый список, так и более лояльное ограничение:

воскресенье, 8 декабря 2013 г.

Использование lambda вместе со списком в Python

Очень наглядный пример использования lambda с методами списков в Python

>>> foo = [2, 18, 9, 22, 17, 24, 8, 12, 27]
>>> 
>>> print filter(lambda x: x % 3 == 0, foo)
[18, 9, 24, 12, 27]
>>> 
>>> print map(lambda x: x * 2 + 10, foo)
[14, 46, 28, 54, 44, 58, 26, 34, 64]
>>> 
>>> print reduce(lambda x, y: x + y, foo)
139


>>> digit = [1, 2, 3]
>>> 
>>> print [(lambda x: x * x)(x) for x in digit)]
[1, 4, 9]
или лучше
>>> print [x * x for x in digit]

Еще интересный пример (вырезать в строке лишние дефисы)

пятница, 6 декабря 2013 г.

XP 0x80246008 ошибка Windows Update

Такая ошибка возникает если проблемы с сервисом "Фоновая интеллектуальная служба передачи (BITS)". Используется BITS Windows для скачивания в фоновом режиме в том числе обновлений. Должна присутствовать в списке сервисов, и включена Auto.  У меня появилась эта ошибка 0x80246008 после Microsoft FixIt - одно лечили другое покалечили. Вместо этой службы у меня появилась служба с таким именем "@%SystemRoot%\System32\qmgr.dll -1000"
В журнале запись ошибки "BITS error 1290: 0x50a"

Решение: экспортировал с рабочей тачки ветку  HKEY_LOCAL_MACHINE\SYSTEM\ControlSet\Services\BITS  
старую удалил новую импортировал, ребутнулся и OK

Содержимое ветки выкладываю здесь:

Настройка WiFi роутера

  1. Forward - UPnP   Некоторые роутеры или клиенты могут не совсем корректно поддерживать UPnP, либо вручную сделан проброс портов и, следовательно, функционал UPnP не нужен. Можно отключить.
  2. WPS    Подключаться будем с паролем установленным вручную, поэтому можно отключить.
  3. Wireless security - WPA2 (Установить пароль)
  4. Также не забудем задать имя WiFi сети. Для более стабильной связи подбираем канал, в настройке сети канал желательно поменять с Auto на более поздний (например 9)