Почему ругается на тип данных в списке?

data = []
dig = float(input("введи число(пустая строка для окончания ввода): "))
while dig != "":
    data.append(dig)
    dig = float(input("введи число(пустая строка для окончания ввода): "))
print(data)
average_value = sum(data) / len(data)
print(average_value)

Ошибка

ValueError: could not convert string to float


Ответы (2 шт):

Автор решения: mrgervant

Программа предусматривает завершение при пустой строке (нажатии Enter) - её невозможно привести к типу float. Поэтому нужно отдельно проверять строку (не пустая ли) и уже потом приводить к float.

Если строка пустая, то в булевых выражениях она будет интерпретирована как False, что прервет цикл while. В Python 3.8 появился моржовый оператор :=, который позволяет присвоить значение переменной и использовать это значение в выражении одновременно. В совокупности получаем более короткий код:

data = []
while dig := input("Введи число (пустая строка для окончания ввода): "):
    data.append(float(dig))
print(data)
→ Ссылка
Автор решения: Fox Fox
#--------------------------------------------------------------------------
# Среднее арифметическое элементов списка
#--------------------------------------------------------------------------

import os as os
import decimal as decimal

print("-" * 50 + "\nСреднее арифметическое элементов списка:\n" + "-" * 50)

while True:

    ok = True

    lst_numbers = input("\nУкажите перечень чисел, разделённых пробелами: ").strip().replace(",", ".").split()
    if not lst_numbers:
        print("Перечень чисел не задан! Попробуйте ещё раз...")
        ok = False
    else:
        try:
            lst_result = list(map(lambda i: decimal.Decimal(i), lst_numbers))
        except:
            print("Введено ошибочное значение числа! Попробуйте ещё раз...")
            ok = False

    if ok:
        break

print("\nЭлементы списка:", lst_numbers)
print("Среднее арифметическое элементов списка:", decimal.Decimal(sum(lst_result) / len(lst_result)))

print("\nНажмите любую клавишу для продолжения...")
os.system("pause > nul")
→ Ссылка