Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет Yuriy Al. Shirokov ([info]yushi)
@ 2008-10-28 23:47:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Вопрос знатокам Питона
Читали тут со [info]zmey про парадокс Монти Холла, написали скриптик для наглядной демонстрации (мне самому, прежде всего, я формулам верю меньше, чем коду):

#!/usr/bin/python

from random import randint

wins = 0

for i in range(0, 1000):
    prize = randint(0,2)
    choice = randint(0,2)
    not_choosed = [j for j in range(3) if j != choice]
    goats = [j for j in not_choosed if j != prize]
    random_goat = goats[randint(0, len(goats) - 1)]
    [new_choice] = [j for j in not_choosed if j != random_goat]
    if (new_choice == prize):
        wins += 1
print i, "iterations", wins, "wins"


Ну, типа, если мы нумеруем двери цифрами 0, 1, 2, то prize — номер двери с автомобилем, choice — первоначальный выбор игрока, not_choosed — номера невыбранных дверей, goats — номера тех из невыбранных дверей, за которыми козы, random_goat — номер той из дверей с козой, которую открывает ведущий, new_choice — оставшаяся дверь. А wins это количество выигрышей, понятно.

Собственно, subj: как это сделать изящнее? А то уж больно много строк (и переменных) для такой простой задачки, мне кажется, что из Питона можно выжать больше. Без пренебрежения читабельностью, разумеется.

А про парадокс Монти Холла я прочитал вот в этом посте, который нашёл благодаря вот этой ссылке от [info]azatiy.


(Читать комментарии) - (Добавить комментарий)


[info]mojo.coil.ru
2008-10-29 04:08 (ссылка)

for i in range(0, 1000):
prize = randint(0,2)
choice = randint(0,2)
if prize != choice:
wins += 1

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]mojo.coil.ru
2008-10-29 04:09 (ссылка)
trigger happy, тоже пора спать


for i in range(0, 1000):
if randint(0,2) != randint(0,2):
wins += 1

(Ответить) (Уровень выше)


(Читать комментарии) -