beldmit: (Программизм)
[personal profile] beldmit
Как и планировал, начал писать на питоне вот эту игру. Из правил осталось реализовать компенсацию и банкротство, и можно будет подсовывать AI разные целевые функции и сравнивать, какая лучше.


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

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

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

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

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


Еще бы правила оригинальной версии найти.

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

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

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

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

Не, с числами все понятно... Не вполне понятно со списками.

Date: 2010-01-05 08:00 am (UTC)
phd_ru: (Default)
From: [personal profile] phd_ru
Всё передаётся по ссылке:
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']
Понятно отличие?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Profile

beldmit: (Default)
Dmitry Belyavskiy

May 2025

S M T W T F S
    123
45678910
11121314151617
181920212223 24
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 19th, 2025 03:19 am
Powered by Dreamwidth Studios