Преобразование строк в числовые значения

We use cookies. Read the Privacy and Cookie Policy

Все ключи и значения в population_data.json хранятся в строковом формате. Чтобы работать с данными численности населения, необходимо преобразовать строковые значения в числа. Для этого в программе используется функция int():

world_population.py

...

for pop_dict in pop_data:

if pop_dict['Year'] == '2010':

country_name = pop_dict['Country Name']

(1) . . . .population = int(pop_dict['Value'])

(2) . . . .print(country_name + ": " + str(population))

После преобразования (1) все данные численности населения хранятся в числовом формате. При выводе численность населения должна быть преобразована в ­строку (2). Впрочем, для некоторых значений это изменение приводит к ошибке:

Arab World: 357868000

Caribbean small states: 6880000

East Asia & Pacific (all income levels): 2201536674

...

Traceback (most recent call last):

File "print_populations.py", line 12, in <module>

. .population = int(pop_dict['Value'])

(1) ValueError: invalid literal for int() with base 10: '1127437398.85751'

Необработанные данные часто форматируются непоследовательно, поэтому ошибки в них встречаются достаточно часто. В данном случае ошибка происходит из-за того, что Python не может преобразовать строку с дробным значением '1127437398.85751' в целое число (1) . (Вероятно, дробное значение было получено в результате интерполяции в те годы, в которые перепись населения не производилась.) Чтобы решить эту проблему, мы сначала преобразуем строку в вещественное число, а затем преобразуем вещественное число в целое:

world_population.py

...

for pop_dict in pop_data:

if pop_dict['Year'] == '2010':

country = pop_dict['Country Name']

. . . .population = int(float(pop_dict['Value']))

print(country + ": " + str(population))

Функция float() преобразует строку в целое число, а функция int() отсекает дробную часть и возвращает целое число. Теперь можно вывести полный набор данных численности населения за 2010 год без ошибок:

Arab World: 357868000

Caribbean small states: 6880000

East Asia & Pacific (all income levels): 2201536674

...

Zimbabwe: 12571000

Каждая строка успешно преобразуется сначала в вещественное, а затем в целое число. Обратите внимание: данные хранятся в числовом формате, чтобы их можно было использовать для построения карты распределения населения.