Python

Python задача на программирование

В файле в столбик записаны числа. Отсортировать их по возрастанию суммы цифр и записать в другой файл. Используйте функцию, которая вычисляет сумму цифр числа.
Igor Gvozdik
Igor Gvozdik
104
Решается в три строки, без таскания списков туда-сюда, даже без лишних конвертаций в int.
 def digitsum(strnum): return sum(map(int, iter(strnum.rstrip('\n').lstrip('-'))))

with open("in.txt", "r") as fin, open("out.txt", "w") as fout:
print(''.join(sorted(fin, key = digitsum)), file = fout)
Кладём рядом с программой файл in.txt с числами внутри:
 324
-71
123
-8
100500
44
0
98
Запускаем, смотрим результат в out.txt.
Владимир Беспалов
Владимир Беспалов
87 571
Лучший ответ
Для решения данной задачи мы можем использовать следующий алгоритм:

Создаем функцию sum_of_digits(), которая будет принимать на вход число и возвращать сумму его цифр.
Открываем файл с числами для чтения и читаем его содержимое в список numbers.
Создаем новый список numbers_with_sum_of_digits, в который будем добавлять кортежи из двух элементов: число и сумма его цифр.
Проходимся по каждому числу из списка numbers, вычисляем сумму его цифр с помощью функции sum_of_digits(), и добавляем кортеж (число, сумма цифр) в список numbers_with_sum_of_digits.
Сортируем список numbers_with_sum_of_digits по второму элементу (сумме цифр).
Открываем новый файл для записи и записываем каждое число из отсортированного списка numbers_with_sum_of_digits в столбик.
Ниже приведен код, реализующий описанный алгоритм:
 def sum_of_digits(number): 
return sum(int(digit) for digit in str(number))

with open('input.txt', 'r') as input_file:
numbers = [int(line.strip()) for line in input_file]

numbers_with_sum_of_digits = []
for number in numbers:
numbers_with_sum_of_digits.append((number, sum_of_digits(number)))

numbers_with_sum_of_digits.sort(key=lambda x: x[1])

with open('output.txt', 'w') as output_file:
for number, _ in numbers_with_sum_of_digits:
output_file.write(str(number) + '\n')
В этом примере мы использовали функцию lambda x: x[1] для сортировки списка numbers_with_sum_of_digits по второму элементу кортежа. Эта функция принимает на вход кортеж и возвращает его второй элемент.
ПТ
Паша Тумали
4 273