beldmit: (Программизм)
Dmitry Belyavskiy ([personal profile] beldmit) wrote2010-01-05 12:11 am
Entry tags:

Змея запускаем- II

Как и планировал, начал писать на питоне вот эту игру. Из правил осталось реализовать компенсацию и банкротство, и можно будет подсовывать AI разные целевые функции и сравнивать, какая лучше.


Так я и не почувствовал, когда массив/словарь передается по ссылке, а когда - по значению. Поэтому copy() в коде расставлены хаотически.

Очень раздражает невозможность проверить синтаксис. Сообщения об ошибках тоже ясностью не отличаются.

Спроектировать разделение на классы получается тоже крайне невнятно. Понятно, что игрок - это отдельный класс, потому как ему разные стратегии выбора оптимального хода прописывать. Функции применения карт ушли в условно-главный модуль, хотя можно их выделить отдельно. "Игра", собственно, по смыслу синглтон.

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

А там, глядишь, и до интерфейса доберусь (видимо, ncurses и PyQt).


Еще бы правила оригинальной версии найти.
ext_659502: (Default)

[identity profile] some41.livejournal.com 2010-01-04 09:23 pm (UTC)(link)
"по значению" ничего не передается

[identity profile] shigin.livejournal.com 2010-01-04 10:21 pm (UTC)(link)
В питоне все передается по ссылке. Числа --- неизменяемый тип, то есть i += 2 создает новый instance.

А игра хорошая, сколько я на нее с друзьями времени потратил --- жуть.

[identity profile] beldmit.livejournal.com 2010-01-05 06:50 am (UTC)(link)
Отож!

Не, с числами все понятно... Не вполне понятно со списками.
phd_ru: (Default)

[personal profile] phd_ru 2010-01-05 08:00 am (UTC)(link)
Всё передаётся по ссылке:
i = 42
def inc(i):
    i += 1

inc(i)
print i # => 42


l = [42]
def append(l):
    l += ['l']

append(l)
print l # => [42, 'l']
Понятно отличие?

[identity profile] beldmit.livejournal.com 2010-01-05 09:00 am (UTC)(link)
на таком уровне понятно.

[identity profile] beldmit.livejournal.com 2010-01-05 09:29 am (UTC)(link)
На самом деле нарвался я на то, что переменная, обрабатываемая в цикле, сохраняла последнее значение, а не то, которое должна.
phd_ru: (Default)

[personal profile] phd_ru 2010-01-05 01:06 pm (UTC)(link)
Ты вот это имеешь ввиду?
i = 0
f = lambda: i
i = 1
print f()
Это не цикл и не передача по ссылке, это closure. При создании lambda (или def, между ними нет разницы) запоминает ссылку на окружающее пространство имён, в котором есть ссылка на переменную i. Даже если ссылка i потом изменится, lambda-то помнит не i, а то пространство имён, в котором определена i, ну и lambda найдёт в этом запомненном пространстве имён новое значение i.

[identity profile] shigin.livejournal.com 2010-01-04 10:25 pm (UTC)(link)
И заодно посмотри на pylint.

[identity profile] beldmit.livejournal.com 2010-01-05 10:26 am (UTC)(link)
Спасибо, посмотрю.
Когда допишу, поскольку ты в это играл, будет с кем проконсультироваться :-)
phd_ru: (Default)

[personal profile] phd_ru 2010-01-05 01:07 pm (UTC)(link)
Я тоже pylint'ом вовсю пользуюсь. А для генерации документации по API - epydoc.

[identity profile] beldmit.livejournal.com 2010-01-05 05:32 pm (UTC)(link)
pylint - это что-то типа Perl::Critic?
А как ему объяснить, что выравнивание табуляциями - нормально? Или это мне надо объяснять, что оно ненормально?
phd_ru: (Default)

[personal profile] phd_ru 2010-01-05 05:45 pm (UTC)(link)
Я не знаю, что такое Perl::Critic, первый раз слышу про такое.

Документация по pylint в нём самом:
pylint --help
pylint --list-msgs
Документация в формате reST, можно сконвертировать в html. То, что тебе нужно - indent-string, по умолчанию 4 пробела. Умолчание в соответствии со Style Guide.

[identity profile] beldmit.livejournal.com 2010-01-05 07:27 pm (UTC)(link)
Ну, до 8+/10 я код причесал (в основном расставив документацию). Выравнивание все-таки табуляцией поставил. Кое-что из его ругани я так и не понял, ну да ладно.

Perl::Critic - это очень полезная валидация стиля для Perl.

[identity profile] r-a-d.livejournal.com 2010-06-30 09:22 pm (UTC)(link)
документация на русском? если да, то как вы запинали epydoc на это?
phd_ru: (Default)

[personal profile] phd_ru 2010-07-01 08:49 am (UTC)(link)
Документация для программиста (комментарии, генерация описания API) у нас принята на английском. Вот документация для пользователя - на русском, но к ней epydoc уже не при чём.

[identity profile] r-a-d.livejournal.com 2010-07-02 07:01 am (UTC)(link)
Везёт вам. Но вопрос в общем, как заставить epydoc, собирать документацию на API на русском.

[identity profile] vovkav.livejournal.com 2010-01-06 04:57 pm (UTC)(link)
Самые стоящие цели на это дело - capitalism2 и democracy2

Оч. рекомендую