Вот ваша проблема:
highest_turnout = (data[0].voters)/(data[0].population)
for county in data:
if (county.voters/county.population) > highest_turnout:
highest_turnout= county
Итак, давайте рассмотрим первую (ну, вторую - ту, что касается data[1]
, поскольку итерация data[0]
здесь не актуальна) итерации этого цикла. highest_turnout
было просто определено как float
избирателей / населения. Вы сравниваете это с другой float
избирателей / населения другой страны. Имеет смысл.
Теперь давайте рассмотрим, что voters / population
выше для data[1]
, чем для data[0]
. Итак, условие if
срабатывает. highest_turnout
имеет значение data[1]
, которое является текущим значением county
.
Мы переходим к следующей итерации, для data[2]
, и вы получаете ошибку:
TypeError: '>' not supported between instances of 'float' and 'County'
В первой итерации highest_turnout
было float
, и вы использовали оператор >
между двумя floats
. Но сейчас , highest_turnout
- это County
, а не float
- когда вы присвоили ему новое значение внутри оператора if
, вы изменили его тип. А поскольку County
не является типом числа, python не знает, как его сравнить с float
. Таким образом, ошибка, которую вы видите здесь.
Решение состоит в том, чтобы сделать highest_turnout
значением, с которым оно сравнивалось, а не страной, из которой получены эти значения:
highest_turnout = county.voters / county.population
Альтернативным решением будет сохранить highest_turnout
страну все время:
highest_turnout = data[0]
for county in data:
if (county.voters/county.population) > (highest_turnout.voters/highest_turnout.population):
highest_turnout = county
Вам просто нужно убедиться, что вы не меняете тип любой переменной, не осознавая этого.