from sympy.interactive import printing printing.init_printing() import sympy as sym from sympy.mpmath import limit, inf from sympy import Rational as frac %pylab inline --no-import-all 1-frac(5,6)**4 1-(5.0/6)**4 1-frac(35,36)**24 1-(35.0/36)**24 def p_a(n): denom = 6**n num = denom - 1 return 1 - (num/denom)**(2*denom/3) x = np.linspace(1,6) plt.plot(x, p_a(x)) None limit(p_a, inf) frac(2,3)*frac(4,52)*frac(48,51) from itertools import permutations # Les lettres et les boîtes ont les indices 0, 1, 2, etc. # Une lettre est dans boîte correcte quand les deux ont # la même indice. def au_moins_une_lettre_correcte(lst): for ind, val in enumerate(lst): if ind == val: return True return False # Quand il y a N boîtes, quelle fraction des distributions sont correctes? def compter_distributions(n): distributions = list(permutations(range(0,n))) correctes = [d for d in distributions if au_moins_une_lettre_correcte(d)] return [len(correctes), len(distributions)] map(compter_distributions, [1,2,3,4,5,6]) list(permutations(range(0,2))) list(permutations(range(0,3))) list(permutations(range(0,4))) (frac(1,1) - frac(1,2) + frac(1,6) - frac(1,24)) * 24 from sympy import binomial as bn, factorial as fact def probabilite_au_moins_une_correcte(n): somme = 0 for k in range(1,n+1): somme += (-1)**(k+1) * frac(1, fact(k)) return somme [fact(i) * probabilite_au_moins_une_correcte(i) for i in range(1,7)]