La source de la confusion est ce que fait format() et à quoi sert le signe % dans ce code. Mais il ne calcule pas le pourcentage pour vous. Il prend simplement les valeurs que vous lui donnez comme arguments et le branche dans la partie qui dit %{..}.
La méthode str.format() est un peu difficile à expliquer et pour être honnête, je ne la comprends pas complètement moi-même.
Il existe une alternative qui fonctionne parfaitement pour des cas comme ceux-ci, mais str.format() est mieux. Je vous suggère Calculateur de pourcentage à travers cela, vous obtenez plus de résultats sur Comment calculer le pourcentage .
L'alternative consiste à utiliser l'opérateur de formatage de chaîne. Cela peut sembler un peu déroutant, mais cela ressemble à la méthode str.format() car elle fait la même chose sous une forme moins sophistiquée et moins puissante.
La façon dont cela fonctionne est :
>>> "bla bla %s" % "
bla bla " 'bla bla bla'
>>>
Pour calculer le pourcentage, vous obtenez d'abord le rapport en divisant la partie par le tout. Ceci est représenté par un nombre décimal inférieur à 1. Exemple, 0,25.
Multipliez ensuite le rapport par 100 pour exprimer ce rapport sous forme de pourcentage.
Donc cette ligne devrait devenir.
ratio = femmes /
empreinte totale ("Les femmes sont %0.2f%%" % (ratio * 100))