Как стать автором
Обновить
33
0

Пользователь

Отправить сообщение
От знакомой: Намедни видела шикарный и очень полезный проект одного парня на LinkedIn. Мне код очень пригодился, даже хотелось написать и поблагодарить автора. Но глянула его профиль в гуглоплюсе и оказалось, что он страшный. И я сразу подумала, что восхищаться, в общем-то, было нечем.
Абсолютно не в тему, но вспомнилась старая задача. Не ищите решение, попробуйте решить сами, это не так сложно и достаточно интересно.
У некоторого султана было два мудреца: Али-ибн-Вали и Вали-ибн-Али. Желая убедиться в их мудрости, султан призвал мудрецов к себе и сказал: «Я задумал два числа. Оба они целые, каждое больше единицы, но меньше ста. Я перемножил эти числа и результат сообщу Али и при этом Вали я скажу сумму этих чисел. Если вы и вправду так мудры, как о вас говорят, то сможете узнать исходные числа».

Мудрецы задумались. Первым нарушил молчание Али.
— Я не знаю этих чисел, — сказал он, опуская голову.
— Я это знал, — подал голос Вали.
— Тогда я знаю эти числа, — обрадовался Али.
— Тогда и я знаю! — воскликнул Вали.
И мудрецы сообщили пораженному царю задуманные им числа.

Назовите эти числа.
В первую очередь мы должны озаботиться тем, что никто не думал о белой обезьяне. Нужны специальные законы, дающие контроль над каналами, через которые мысли о белой обезьяне могут просочиться в вашу голову. Для успешности борьбы с данным явлением необходимы постоянные отчеты на публичных СМИ о том, сколько потенциальных мыслей о белой обезьяне было предотвращено за истекший период.
И сейчас мы обращается к вам, граждане с активной позицией! Что бы вы ни изучали, подумайте, не провоцирует ли данный материал мыслей о белой обезьяне. Если да — все просто, сразу же обращайтесь к нам.
И поверьте, мы не оставим дело просто так. Мы, также как и вы, будем выискивать подобные материалы в сферах телевидения, радио и интернет и составлять их подробный список. Представьте, кто-то по незнанию (а это может быть ваш ребенок) случайно перейдет по ссылке, содержимое которой немедленно заполнит незащищенный разум мыслями о белой обезьяне. Но не тут-то было! Благодаря нашим с вами слаженным действиям материал к тому моменту уже будет заблокирован и вместо него человек увидит заглушку, извещающую о том, что материал был запрещен по подозрению в насаждении ненужных разумному человеку мыслей о белой обезьяне.

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

print ' '.join([(not i%3)*'Fizz'+(not i%5)*'Buzz' or str(i) for i in range(1,101)])
[(not i%3 and 'Fizz' or '')+(not i%5 and 'Buzz' or '') or i for i in range(1,101)]
Может быть потому, что используется накопитель SSD, а не Flash?
Или у нас теперь любой накопитель с USB-интерфейсом и энергонезависимой паматью называется флешкой?
key in arr and arr.pop(key)

Явно и легко читается.
Я абсолютно согласен. Просто предложил решение.
Конечно же, лучше обрабатывать ошибку или проверять наличие ключа перед удалением.
А создать класс
class safedict(dict):
  remove = lambda self, key:key in self and (self.__delitem__(key) or True)


не вариант?
Нечто подобное, насколько знаю, применялось в серии TES. В TES3:Morrowind многочисленные дома и подземелья были сгенерированы автоматически.
И далеко не всем это пришлось по вкусу. Почему? Да потому что игрок рубится с монстрами, зачищает немаленькое подземелье, а что в конце? Сундук с зельями. На пятом подземелье становится откровенно скучно. Игрокам нужна награда. Слишком частые и весомые награды могут сделать дальнейшую игру слишком легкой.

Критика была учтена и в следующей части серии автоматически генерировались только леса и прочие мелкие детали ландшафта. Впрочем, это тоже не всем понравилось и возник замечательный проект Unique Landscapes, который заменяет скучный однообразные ландшафты, сделанные генератором на созданные вручную и добавляет всяческие водопады, пустыни, особенные леса.

Так что автогенерация есть, но пока что она далека от совершенства. И чтобы довести ее до этого самого совершенства нужен титанический труд разработчиков.
PS. Карта в приведенных выше играх была сгенерирована еще на этапе разработки, а не во время начала новой игры. Просто привел пример того, что большие пространства, сделанные генераторами, это здорово, но этого явно недостаточно.
Большинство как раз позитивные. Писали, что улучшили поддержку docx, плюс проект быстро развивается, а это самое главное.
Интересно:

import time
def test(f, a):
  t=time.clock()
  for i in xrange(1000000):
    f(a)
  return time.clock()-t
  
a=range(1000000)

print test(len, a)
print test(bool, a)

len(a) отрабатывает быстрее всех, за ней any, за ней bool. Не ожидал.
print test(any, a)<source>
>>Начиная с непонятности синтаксиса встроенный_тип() и заканчивая неочевидностью того, создастся ли копия.
Чем такой синтаксис непонятен? Выглядит как обычное преобразование типа.

>>a.reverse() меняет in-place, слайс создаёт новый объект.
Неверно написал, имел ввиду a=a[::-1], конечно же.
Спасибо, внес в статью правки. В проект тоже =)
Самое интересное, знал про это и часто писал конструкции вроде
users = activeUsers or allUsers or "Is there anybody?"


И все равно проверял непустоту списка с помощью any(a), bool(a) даже в голову не пришел.

Тем не менее, человек, который впервые видит python-код, сразу поймет, что list(a) — это создание нового объекта. А вот a[:] — вещь нетривиальная.

Также, a.reverse() лучше чем a[::-1] по той же причине.
Правда, для строки a.reverse() не подойдет.
Тем, что a[:] создает новый объект. Это аналогично list(a). Кстати, улчше так и писать, чтобы не возникало подобным вопросов.
Похоже, что я был неправ.
Хм. У меня почему-то было стойкое ощущение, что ставится почти всегда, сейчас поискал примеры кода — в 4 из 5 случаев точки с запятой нет. У меня, насколько помню, эта привычка появилась из-за какой-то IDE, которая не подсвечивала pass, а только pass;
Тем не менее, точки с запятой желательны после pass и break.
Не так страшны вчерашние программисты на дельфи, как они же, пишущие код для введения в заблуждение вероятного противника:
for i in range(100): a += 1; b += a;
Если мы уверены, что в списке не будет None, False и пустых строк. К примеру, список имен пользователей.

def isSomeoneThere():
    return len(activeUsers) and "Yes" or "No"

def isSomeoneThere():
    return any(activeUsers) and "Yes" or "No"

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность