[python] application d'une formule de proba
Templier Nocturne
Messages postés
7734
Date d'inscription
Statut
Membre
Dernière intervention
-
Templier Nocturne Messages postés 7734 Date d'inscription Statut Membre Dernière intervention -
Templier Nocturne Messages postés 7734 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
je dispose d'une formule de probabilité :
http://img4.hostingpics.net/pics/438781equation.png
ainsi que de sa translation en PHP :
cependant, quand je la traduit en python, ça marche pas :/
voilà mon code :
(c'est pour une page django)
je me retrouve avec un "resu" qui vaut toujours 100,0
quelqu'un peut il m'indiquer mon erreur ?
en vous remerciant d'avance
-Templier Nocturne
je dispose d'une formule de probabilité :
http://img4.hostingpics.net/pics/438781equation.png
ainsi que de sa translation en PHP :
function factorielle($valeur){ $fact = 1; for($i = 1; $i <= $valeur; $i++) $fact *= $i; return $fact; } function combinaison($k, $n){ return (factorielle($n) / (factorielle($k) * factorielle($n - $k))); } function maFonction($a, $b, $c){ $resu = 0; for($k = $c + 1; $k <= $b; $k++){ $temp = combinaison($k, $b); $temp *= pow((1/$a), $k); $temp *= pow((1 - 1/$a), $b - $k); $resu += $temp; } $resu = $resu * 100; $resu = 100 - $resu; return round($resu,3); }
cependant, quand je la traduit en python, ça marche pas :/
voilà mon code :
def survival(request): a = request.GET.get('a','') b = request.GET.get('b','') c = request.GET.get('c','') def facto(valeur): x = 1 fact = 1 while x < valeur: fact = fact * x x = x + 1 return fact def combinaison(k, n): return facto(n) / ( facto(k) * facto(n - k) ) def mafonction(a, b, c): if a != '' and b != '' and c != '': a = int(a) b = int(b) c = int(c) resu = 0 k = c + 1 while k <= b: temp = combinaison(k, b) temp = temp * ((1 / a)**k) temp = temp * (1 - 1/a)**( b - k) resu = resu + temp k = k + 1 resu = resu * 100 resu = 100 - resu return round(resu, 3) else: return False def mafonction2(a, b, c): if a != '' and b != '' and c != '': a = int(a) b = int(b) c = int(c) resu = 0 k = c + 1 while k <= b: temp = combinaison(k, b) temp = temp * ((1 / a)**k) temp = temp * (1 - 1/a)** ( b - k) resu = resu + temp k = k + 1 resu = resu * 100 resu = 100 - resu return combinaison(k, b) else: return False now = datetime.datetime.now() t = get_template('test.php') html = t.render(Context({ 'total': mafonction(a, b, c), })) return HttpResponse(html)
(c'est pour une page django)
je me retrouve avec un "resu" qui vaut toujours 100,0
quelqu'un peut il m'indiquer mon erreur ?
en vous remerciant d'avance
-Templier Nocturne
A voir également:
- [python] application d'une formule de proba
- Nommez une application d'appel vidéo ou de visioconférence - Guide
- Formule si et - Guide
- Formule moyenne excel plusieurs colonnes - Guide
- Desinstaller une application sur windows - Guide
- Comment supprimer une application préinstallée sur android - Guide
5 réponses
Bonjour,
k=c+1
while k <= b:
Ça fera toujours 100 si c, est supérieur ou égale à b, vu que la boucle ne fonctionnera pas on tombe directement sur
resu = resu * 100
resu = 100 - resu
resu étant à zéro au départ
100-0 = 100
k=c+1
while k <= b:
Ça fera toujours 100 si c, est supérieur ou égale à b, vu que la boucle ne fonctionnera pas on tombe directement sur
resu = resu * 100
resu = 100 - resu
resu étant à zéro au départ
100-0 = 100
Dans le lien , la sommation va de c à b, pas de c+1 à b. J'ai donc utilisé c et non pas c+1 dans le code qui suit.
Tes deux fonctions peuvent être fondues en une seule moyennant l'utilisation d'un paramètre supplémentaire pour lequel il faudra passer un argument égal à 1 ou 2 selon ce qu'on veut en voir sortir.
J'ai auusi réorganisé un peu le code et pris des raccourcis.
Hxyp a raison, le programme ne sortia des résultats que si c n'est pas supérieur à b. A toi de réexaminer sur quelles valeurs tu utilises cette fonction
Tes deux fonctions peuvent être fondues en une seule moyennant l'utilisation d'un paramètre supplémentaire pour lequel il faudra passer un argument égal à 1 ou 2 selon ce qu'on veut en voir sortir.
J'ai auusi réorganisé un peu le code et pris des raccourcis.
Hxyp a raison, le programme ne sortia des résultats que si c n'est pas supérieur à b. A toi de réexaminer sur quelles valeurs tu utilises cette fonction
def mafonction(a, b, c, choix): if a != '' and b != '' and c != '': a,b,c = map(int,(a,b,c)) if choix==1: return combinaison(k, b) elif choix==2: li = [] for k in xrange(c,b+1): temp = combinaison(k, b) temp = temp * ((1 / a)**k) li.append(temp * (1 - 1/a)**( b - k)) return round(100 - 100*sum(li) , 3) else: return False
salut, désolé de répondre si tard, je m'attendais à recevoir un mail quand quelqu'un répondrait :/
dans mes calculs, c est inférieur à b dans la plupart des cas, mais je trouve quand même 100
dans mes calculs, c est inférieur à b dans la plupart des cas, mais je trouve quand même 100
non, toujours le même problème :/
j'ai encore 100.0 :/
(désolé de la réponse tardive, je pensais recevoir une notification par mail)
j'ai encore 100.0 :/
(désolé de la réponse tardive, je pensais recevoir une notification par mail)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question