W Python 2 dzielenie liczby całkowitej przez całkowitą zostaje zaokrąglone do liczby całkowitej.
Musisz jedną z liczb przed dzieleniem zamienić na liczbę rzeczywistą za pomoca float()
(lub ewentualnie mnożąć przez liczbę rzeczywistą 1.0)
Swoją drogą to mógłbyś najpierw wszystkie teksty zamienić na wartości liczbowe
aby nie robić tych samych obliczeń wiele razy.
Przez to i sam zapis obliczenia byłby czytelniejszy.
x = ["338","836","736"]
x = map(int, x)
print float(x[0]) / (x[0]+x[1]+x[2]) * 100
Tutaj można nawet zastosować sum()
x = ["338","836","736"]
x = map(int, x)
print float(x[0]) / sum(x) * 100
Ostatecznie wynik będzie liczbą rzeczywistą 17.6963350785
i jak chcesz zaokrąglenia to użyj np. round()
i otrzymasz liczbę rzeczywistą 18.0
Jak chcesz aby wynik znów był liczbą całkowitą to użyj int()
x = ["338","836","736"]
x = map(int, x)
wynik = float(x[0]) / sum(x) * 100
print round(wynik) # rzeczywista 18.0
print int(round(wynik)) # calkowita 18
**EDIT: **
Co do dzielenia można też zamienić kolejność działań
i zamienić całkowite 100 na rzeczywiste 100.0
aby najpierw nastąpiło mnożenie rzeczywistej i całkowitej co da rzeczywistą
a dopiero potem aby dzieliło rzeczywistą przez całkowitą co da rzeczywistą.
x = ["338","836","736"]
x = map(int, x)
wynik = 100.0 * x[0] / sum(x)
print round(wynik) # rzeczywista 18.0
print int(round(wynik)) # calkowita 18
--
Najłatwiejszym rozwiązaniem jest jednak zaimportowanie z "przyszłości"
dzielenia takiego jak jest w Python 3
from __future__ import division
print 1/2 # 0.5
print 1//2 # 0 zaokrąglenie do całkowitych
i od teraz wszystkie dzielenia dają wynik rzeczywisty.