Не могу понять, в чем заключается ошибка ValueError
def personal_sum(*numbers):
result = 0
incorrect_data = 0
for i in numbers:
try:
result += i
except TypeError:
print(f'Некорректный тип данных для подсчета суммы – {i}')
incorrect_data += 1
return f'Сумма чисел: {result}, количество некорректных данных: {incorrect_data}'
def calculate_average(*numbers):
try:
if not isinstance(numbers, (list, tuple)):
print('В numbers записан некорректный тип данных')
return None
total_sum, incorrect_data = personal_sum(numbers)
count = len(numbers) - incorrect_data
average = total_sum / count
return average
except ZeroDivisionError:
return 0
except TypeError:
print('В numbers записан некорректный тип данных')
return None
# Примеры использования этих функций
print(f'Результат 1: {calculate_average("1, 2, 3")}')
print(f'Результат 2: {calculate_average([1, "Строка", 3, "Ещё Строка"])}')
print(f'Результат 3: {calculate_average(567)}')
print(f'Результат 4: {calculate_average([42, 15, 36, 13])}')
Напишите 2 функции:
Функция personal_sum(numbers): Должна принимать коллекцию numbers. Подсчитывать сумму чисел в numbers путём перебора и увеличивать переменную result.
Если же при переборе встречается данное типа отличного от числового, то обработать исключение TypeError, увеличив счётчик incorrect_data на 1.
В конечном итоге функция возвращает кортеж из двух значений: result - сумма чисел, incorrect_data - кол-во некорректных данных. Функция calculate_average(numbers) Среднее арифметическое - сумма всех данных делённая на их количество.
Должна принимать коллекцию numbers и возвращать: среднее арифметическое всех чисел. Внутри для подсчёта суммы используйте функцию personal_sum написанную ранее.
Т.к. коллекция numbers может оказаться пустой, то обработайте исключение ZeroDivisionError при делении на 0 и верните 0. Также в numbers может быть записана не коллекция, а другие типы данных, например числа. Обработайте исключение TypeError выводя строку 'В numbers записан некорректный тип данных'. В таком случае функция просто вернёт None.
Ответы (1 шт):
Ты распаковываешь две переменные, total_sum и incorrect_data из строки personal_sum(numbers).
a, b = 'Какая-та строка' # Ошибка
a, b = 'Значение', 123 # Верно
a, b = ('Значение', 123) # Верно
Я так понял, что нужно в функции personal_sum возвращать не строку, а список/кортеж.