Мой первый опыт с микроконтроллерами был с OOPic-R. Это позволило мне делать простые автоматизированные эксперименты, не вызывая беспокойство слишком много о коде. Поток объектно-ориентированного программирования заставляет все работать быстро и легок к программе.
Недавно, я попробовал другое разнообразие PIC, очень дешевое PICAXE. Включенный интерфейс программирования является бризом для работы с. Кроме того, для физического взаимодействия через интерфейс с PICAXE Вам только нужен порт RS-232 для программирования его и два контакта на микросхеме (никакая потребность сделать смещение уровня). Я встроил PICAXE в очень маленькие контейнеры (SMD и доступные микросхемы DIP), и это работало вполне хорошо.
у меня нет опыта с программированием микроконтроллеров в блоке. Если Вы хотите попробовать это, AVR мог бы более подойти из-за, он - более многочисленное пользовательское сообщество.
, Насколько я знаю, самый дешевый способ программировать использование AVR, инструменты ATMEL являются ATMEL AVR ISP mkII за 35$. Можно найти сторонних программистов за 10-15$.
С таким большим количеством предложенных решений я ' m удивлен, что никто не предложил то, что я считаю очевидным (для нехешируемых, но сопоставимых элементов) - [ itertools.groupby
] [1]. itertools
предлагает быструю, многоразовую функциональность и позволяет делегировать некоторую сложную логику хорошо протестированным компонентам стандартной библиотеки. Рассмотрим, например:
import itertools
import operator
def most_common(L):
# get an iterable of (item, iterable) pairs
SL = sorted((x, i) for i, x in enumerate(L))
# print 'SL:', SL
groups = itertools.groupby(SL, key=operator.itemgetter(0))
# auxiliary function to get "quality" for an item
def _auxfun(g):
item, iterable = g
count = 0
min_index = len(L)
for _, where in iterable:
count += 1
min_index = min(min_index, where)
# print 'item %r, count %r, minind %r' % (item, count, min_index)
return count, -min_index
# pick the highest-count/earliest item
return max(groups, key=_auxfun)[0]
Конечно, это можно было бы написать более кратко, но я стремлюсь к максимальной ясности. Два оператора print
можно раскомментировать, чтобы лучше видеть механизм в действии; например, с печатает без комментариев:
print most_common(['goose', 'duck', 'duck', 'goose'])
испускает:
SL: [('duck', 1), ('duck', 2), ('goose', 0), ('goose', 3)]
item 'duck', count 2, minind 1
item 'goose', count 2, minind 0
goose
Как видите, SL
- это список пар, каждая пара - это элемент, за которым следует индекс элемента в исходном списке (для реализации ключевого условия, согласно которому, если «наиболее распространенные» элементы с одинаковым наибольшим количеством> 1, результат должен быть самым ранним из появившихся).
groupby
группирует только по элементам (через operator.itemgetter
). Вспомогательная функция, вызываемая один раз для каждой группировки во время вычисления max
, получает и внутренне распаковывает группу - кортеж с двумя элементами (item, iterable)
, где элементы итерируемого также являются двух- кортежи элементов, (элемент, исходный индекс)
[[элементы из SL
]].
Затем вспомогательная функция использует цикл для определения количества записей в группе итерируемый, и минимальный исходный индекс; он возвращает их как объединенные "
Чтобы использовать NTLM, см. ответ Джона . Если вам нужны заголовки между сеансами, посмотрите свойство CookieContainer в объекте HttpWebRequest. Вам нужно будет сохранить ссылку на свой CookieContainer и прикрепить ее к любым другим запросам HttpWebRequests, которые вы делаете.