from math import sqrt
def wilson_score(sum_rating, n, votes_range = [1, 5]):
z = 1.64485
v_min = min(votes_range)
v_width = float(max(votes_range) - v_min)
phat = (sum_rating - n * v_min) / v_width / float(n)
rating = (phat+z*z/(2*n)-z*sqrt((phat*(1-phat)+z*z/(4*n))/n))/(1+z*z/n)
return rating * v_width + v_min
print wilson_score(11319, 2429);
print wilson_score(120, 25);
ZnJvbSBtYXRoIGltcG9ydCBzcXJ0CmRlZiB3aWxzb25fc2NvcmUoc3VtX3JhdGluZywgbiwgdm90ZXNfcmFuZ2UgPSBbMSwgNV0pOgogICAgeiA9IDEuNjQ0ODUKICAgIHZfbWluID0gbWluKHZvdGVzX3JhbmdlKQogICAgdl93aWR0aCA9IGZsb2F0KG1heCh2b3Rlc19yYW5nZSkgLSB2X21pbikKICAgIHBoYXQgPSAoc3VtX3JhdGluZyAtIG4gKiB2X21pbikgLyB2X3dpZHRoIC8gZmxvYXQobikKICAgIHJhdGluZyA9IChwaGF0K3oqei8oMipuKS16KnNxcnQoKHBoYXQqKDEtcGhhdCkreip6Lyg0Km4pKS9uKSkvKDEreip6L24pCiAgICByZXR1cm4gcmF0aW5nICogdl93aWR0aCArIHZfbWluCiAKcHJpbnQgd2lsc29uX3Njb3JlKDExMzE5LCAyNDI5KTsKcHJpbnQgd2lsc29uX3Njb3JlKDEyMCwgMjUpOw==