Sam & Max » random http://sametmax.com Du code, du cul Sat, 07 Nov 2015 10:56:13 +0000 en-US hourly 1 http://wordpress.org/?v=4.1 Le bon coup de pute du jeudi 7 http://sametmax.com/le-bon-coup-de-pute-du-jeudi/ http://sametmax.com/le-bon-coup-de-pute-du-jeudi/#comments Thu, 23 Jul 2015 07:06:02 +0000 http://sametmax.com/?p=16655 Le bureau est calme. Trop calme. Les projets avancent, vos clients sont heureux et – pire ! – vos collègues sourient.

Il est temps de changer tout ça.

Choisissez une victime qui est partie boire un café sans locker sa session (quitte à faire un exemple, autant choisir un être faible), et créez un petit fichier dans le chemin “~/au/fin/fond/de/ses/reps/de/travail/evil.py”.

Ensuite mettez ça dedans :

import random
import functools
 
# on garde une référence à l'ancienne fonction
# pour éviter une récursion infinie
old_range = range
 
# on lui créé un remplaçant avec les mêmes métatadas
@functools.wraps(range)
def random_range(start, stop=None, step=1):
 
    # on mimic la signature un peu originale de range()
    if not stop:
        stop = start
        start = 0
 
    # et on fait un range avec un tout petit peu de piment
    return old_range(start, stop + random.randint(-1, 1), step)
 
# on range (lol) tout comme si de rien était
__builtins__.range = random_range

Et il n’y a plus qu’à faire pointer la variable d’environnement PYTHONSTARTUP dessus. Par exemple sous Unix, dans son .bashrc:

export PYTHONSTARTUP=~/au/fin/fon/de/ses/reps/de/travail/evil.py

Et maintenant, à chaque fois qu’il ou elle lancera son shell:

>>> range
    <function builtins.range>
 
>>> list(range(10))
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
 
>>> list(range(10))
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
 
>>> list(range(10))
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
 
>>> list(range(10))
    [0, 1, 2, 3, 4, 5, 6, 7, 8]

*Zoom final sur rire diabolique*

]]>
http://sametmax.com/le-bon-coup-de-pute-du-jeudi/feed/ 7
Le problème de Monty Hall illustré en Python 63 http://sametmax.com/le-probleme-de-monty-hall-illustre-en-python/ http://sametmax.com/le-probleme-de-monty-hall-illustre-en-python/#comments Wed, 03 Apr 2013 14:45:25 +0000 http://sametmax.com/?p=5588 En plus d’être un article qui va nous faire remonter dans toutes les recherches sur les Monty Python, il va ravir nos amis statisticiens.

Le problème de Monty Hall est un problème mathématique si simple qu’un enfant de 5 ans peut le comprendre. Et sa véritable réponse est tellement contre intuitive que des centaines de doctorants ont longtemps contesté sa véracité.

Il part d’un jeu télévisé américain présenté par le canadien Monte Halperin, plus connu sous son nom de scène, Monty Hall. À un moment du jeu le candidat se retrouve face à 3 portes, derrière deux d’entre elles se cache une chèvre. Derrière l’une se cache une voiture à gagner.

Maintenant voilà l’astuce :

Quand le candidat choisit une porte, le présentateur, qui sait ce qu’il y a derrière les portes, ouvre une des portes qui n’a pas été choisie. Il s’arrange pour que la porte ouverte montre toujours une chèvre. Il demande alors si le candidat veut garder sa porte ou prendre la troisième porte.

Question :

Le candidat doit-il changer de porte ?

Là où le cerveau vous lache

Les êtres humains normaux, comme vous, moi et Jean Dujardin, ont tendance à sortir une réponse qui ressemble à peu prêt à ça : “on s’en branle connard, il a une chance sur deux, c’est pareil qu’il reste ou qu’il change”.

Sauf que non.

Marilyn vos Savant (un nom pareil putain, c’est prédestiné), a qui on avait posé la question, a une version un peu différente. Or la miss est notamment célèbre parce qu’elle a figuré dans le Guinness des records pour son QI de 190.

Selon elle, il vaut mieux changer de portes, car on a dans ce cas 2 chances sur 3 de gagner, et non une sur deux.

Si ça vous la coupe, ne vous inquiétez pas, elle a reçu des milliers de lettres plus ou moins sympathiques de scientifiques du monde entier pour la traiter de sale connasse qui ne comprend rien aux stats (je paraphrase). Notre cerveau n’aime pas trop cette réponse.

Si vous vous sentez bien réveillé, vous pouvez lire une des dizaines d’explications du phénomène. Peut être qu’il y en a une qui fera tilt. Sinon, faites comme moi, codez un petit script.

Avec Python, on se sent moins con

Rappelez-vous les règles :

  1. 3 portes, 2 chèvres, une voiture.
  2. Le participant choisit une porte au hasard, mais ne l’ouvre pas.
  3. Le présentateur, qui sait où est la voiture, fait monter la sauce en ouvrant une des deux portes restantes, dévoilant toujours une chèvre.
  4. Le participant se voit alors offrir le choix de garder sa porte ou en changer.

Et ça donne ça, dans la langue de Guido Van Rossum :

# -*- coding: utf-8 -*-
 
 
import random
 
 
victoires_quand_on_change = victoires_quand_on_reste = 0
portes = (u"Voiture", u"Chèvre", u"Chèvre")
 
# On fait 10000 parties du jeu
for i in xrange(10000):
 
    # Le joueur prend une porte au hasard
    porte_choisie = portes[random.randint(0, 2)]
 
    # Le présentateur ouvre une des deux autres porte et c'est toujours une 
    # chèvre derrière celle-ci. La dernière porte contient donc une
    # voiture si le candidat a choisit une chèvre, et inversement.
    porte_restante = u'Chèvre' if porte_choisie == u"Voiture" else u"Voiture"
 
    # int(False) == 0 et int(True) == 1 en Python
    victoires_quand_on_change += int(porte_restante == u'Voiture')
    victoires_quand_on_reste += int(porte_choisie == u'Voiture')
 
 
print(u"Victoires quand on reste : {}".format(victoires_quand_on_reste))
print(u"Victoires en change : {}".format(victoires_quand_on_change))
## Victoires quand on reste : 3354
## Victoires en change : 6646

On peut lancer le script autant de fois qu’on veut, on retrouve toujours cette proportion de 2 / 3 de victoires si on change, et 1 / 3 si on reste. Perturbant, mais au moins je sais que je n’ai pas 190 de QI.

Monty Hall, XKCD


Télécharger le code de l’article.

]]>
http://sametmax.com/le-probleme-de-monty-hall-illustre-en-python/feed/ 63