Почему ругается на тип данных в списке?
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")