не удалось преобразовать строку в float (python)

#python

#python

Вопрос:

Я пытаюсь найти сумму всех чисел в списке, но каждый раз, когда я пытаюсь, я получаю сообщение об ошибке, что не удается преобразовать строку в float. Вот что у меня есть на данный момент.

 loop = True
float('elec_used')
while (loop):
    totalelec = sum('elec_used')
    print (totalelec)
    loop = False
  

Комментарии:

1. Что вы ожидаете float('elec_used') сделать?

2. Пожалуйста, примите ответ, который помог вам решить проблему, в качестве ссылки для других, столкнувшихся с той же проблемой в будущем

Ответ №1:

Вам не нужен ни один из приведенных выше кодов. Цикл while не нужен, и похоже, что он просто выходит из цикла за одну итерацию, т. Е. используется неправильно. Если вы просто суммируете все значения в списке:

 sum([float(i) for i in elec_used])
  

Если это приводит к ошибкам, пожалуйста, опубликуйте свой список elec_used. Вероятно, она содержит строковые значения или пробелы.

Комментарии:

1. sum(float(i) для i в elec_used) Я думаю, что вы можете потерять квадратные скобки

2. ^ да, то, что он сказал @RolfofSaxony

Ответ №2:

'elec_used' имеет тип string символов. Вы не можете преобразовать символы в float . Я не уверен, почему вы думали, что сможете это сделать. Однако вы можете преобразовать числовую строку в float, приведя ее к типу. Например:

 >>> number_string = '123.5'
>>> float(number_string)
123.5
  

Теперь переходим ко вашей второй части, к вычислению суммы чисел. Допустим, у вас есть строка из нескольких чисел. Сначала .split() просмотрите список, введите каждый элемент в float , а затем вычислите sum() . Например:

 >>> number_string = '123.5 345.7 789.4'
>>> splitted_num_string = number_string.split()
>>> number_list = [float(num) for num in splitted_num_string]
>>> sum(number_list)
1258.6
  

Который можно было бы записать в одну строку, используя понимание списка как:

 >>> sum(float(item) for item in number_string.split())
1258.6
  

ИЛИ, используя map() как:

 >>> sum(map(float, number_string.split()))
1258.6