[python] application d'une formule de proba
Templier Nocturne
Messages postés
9989
Statut
Membre
-
Templier Nocturne Messages postés 9989 Statut Membre -
Templier Nocturne Messages postés 9989 Statut Membre -
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
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 -
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 fonctiondef 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 -
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) -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
en fait, il semblerait que si c = 0, le résultat passe à 0, mais soit 100 pour 'importe quelle autre valeur