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

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]a_karpov
2008-10-29 00:08 (ссылка)
гыгыгы, я только на прошлой неделе тоже делал круглые глаза и не верил, что надо менять выбор. Убежден был вот как:

есть десять дверей, за одной конфета, за другими пусто. Я выбираю одну, мне открывают восемь других, пустых. Итак, конфета за одной из оставшихся двух дверей. Если я считаю, что вероятность того, что она за моей изначально выбранной дверью, равна теперь одной второй - пусть так! Значит, если я не изменю свой выбор, то побеждаю с вероятностью в одну вторую.

А теперь, собственно, фокус - раз я так считаю, и раз я заранее знаю, что не изменю выбора, и раз я заранее знаю, что мне откроют восемь дверей где пусто, то я вообще никакой новой информации не получил. То есть, ведущий ничего вообще может не открывать, а я просто выбираю одну дверь из десяти.
Итак, одна вторая равна одной десятой, противоречие.

(Ответить) (Ветвь дискуссии)


[info]yushi
2008-10-29 00:17 (ссылка)
А теперь, собственно, фокус

Во. Это понятное объяснение, почему интуитивное решение неверно, я, кстати, до него не додумался. Tnx.

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


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