/К сожалению, некоторые старые версии Python (в частности, интерпретатор) были утеряны вследствие повреждения репозитория, поэтому обратимся к чуть более поздним версиям, чтобы увидеть, как были реализованы объекты/
http://habrahabr.ru/company/mailru/blog/234747/
Году кажется в 2002, довольно скоро после того, как я практически познакомился с Питоном впервые, мне почему-то приснилось, что внезапно исходники интерпретатора (CVS по всей видимости, кто же ещё) остались у меня одного. Знаете, эдакий приятный сон о том, как спасаешь что-нибудь ценное, прямо как Аркадий Паровозов.
Мне этот сон показался неумным тогда, и кажется неумным до сих пор. Сейчас это звучит уже совсем невероятно: слишком большое сообщество и нормальный распределённый контроль версий. Да и в 2002 г. тоже уже не было реально, чего уж там.
Однако оговорка в статье заставила меня об этом сне вспомнить...
Старперский пост какой-то получился.
Компенсирую тем, что в 1990 г., когда Питон уже кое-как был, я ходил в начальную школу и компьютер, если не считать микрокалькуляторов, руками к тому моменту трогал раз пять (впервые я лет в 5 пытался мочить Space Invaders на болгарском клоне PDP-11 у папы на работе). Только через год у меня появился Спектрум и только ещё через год я ощутил кайф во время собственных попыток на нём что-то запрограммировать.
Значит ECMAScript язык кривой, а Питон-нет?
http://habrahabr.ru/post/192098/
Ну ну.
Самый тупой способ генерировать случайные числа от нуля до нужной верхней границы (не включая), если у тебя есть [псевдо]случайные (устраивающего тебя качества) биты — взять остаток от деления на верхнюю границу. Проблема в том, что это не даст равномерного распределения. Так, например, если брать по 3 бита (минимально необходимое число), а нужно сгенерировать число в [0, 5), то очевидно результат будет вдвое чаще попадать в [0, 3), чем в [3, 5). Так что этот способ настолько тупой, что даже неправильный =).
Следующий — брать по 3 бита, пока не попадёт в нужный диапазон. Очень честный способ. Обеспечивает равномерность. Но выкидывает достаточно дорогие [псевдо]случайные биты. В принципе вероятность с первого раза попасть, куда надо, может быть около ½. Поэтому способ тоже тупой. Так, кстати, делает Питон (вот почему тут такой тег), можете посмотреть: http://hg.python.org/cpython/file/3.3/Lib/random.py функция _randbelow
Ок, хорошо, а кто скажет, как это делать нормально, чтобы распределение было равномерным, но чтобы при этом не выкидывать случайные биты?