L. Разделяй и властвуй

Напишите утилиту, которая разделяет числа, записанные в файле, на три группы:

  • числа с преобладающим количеством чётных цифр;
  • числа с преобладающим количеством нечётных цифр;
  • числа с одинаковым количеством чётных и нечётных цифр.

Формат ввода

Пользователь вводит четыре имени файла.
Первый файл содержит произвольное количество чисел, разделённых пробелами и символами перевода строки.

Формат вывода

В три другие файла выведите числа, которые подходят под требуемое условие.
Сохраните положение чисел в строках.

Пример

Ввод

# Пользовательский ввод:
numbers.txt
even.txt
odd.txt
eq.txt

# Содержимое файла numbers.txt
650975472 591084323 629700 1504180 577023
8460612246 42161437 29409368 58531725 5725268 2198001838
796451 69358 7195510 975628465 9756641
44200289 126541 979391 93479581 291170 28987042 86139603

Вывод

# Содержимое файла even.txt
629700 1504180
8460612246 29409368 5725268 2198001838
975628465
44200289 28987042

# Содержимое файла odd.txt
650975472 591084323 577023
58531725
796451 69358 7195510 9756641
979391 93479581 291170

# Содержимое файла eq.txt

42161437

126541 86139603

Решение

Основная сложность для учеников заключается в сохранении номеров строк, на которых находились числа. В остальном задачка не сильно сложная.

Читаем построчно файл. Каждую строку разбиваем на числа и любым удобным для нас способом считаем количество четных и нечетных цифр в числе. Если преобладают четные – записываем число в список четных, если нечетные – в список нечетных. Если количество четных и нечетных совпало – в список неопределившихся. По окончанию строки, все три списка дописываются каждый в свой файл.

Как вариант, можно накапливать списки строк для каждого файла отдельно, и записать все в один присест в самом конце.

Можно все содержимое каждого из файлов вообще записывать в одну результирующую строку и писать весь файл обычным write().

Посмотреть код

Решение

Python
input_file = input()
evens_file = input()
odds_file = input()
equals_file = input()

with open(input_file, encoding="UTF-8") as file:
    strings = [string for string in file.read().split("\n") if string]

even_digits = "02468"
odd_digits = "13579"

for string in strings:
    evens, odds, equals = [], [], []

    for number in string.split():
        total_evens = total_odds = 0
        for char in number:
            if char in even_digits:
                total_evens += 1
            elif char in odd_digits:
                total_odds += 1

        if total_evens > total_odds:
            evens.append(number)
        elif total_evens < total_odds:
            odds.append(number)
        else:
            equals.append(number)

    with open(evens_file, "a", encoding="UTF-8") as file:
        file.write(" ".join(evens) + "\n")
    with open(odds_file, "a", encoding="UTF-8") as file:
        file.write(" ".join(odds) + "\n")
    with open(equals_file, "a", encoding="UTF-8") as file:
        file.write(" ".join(equals) + "\n")

Решение

Python
input_file = input()
evens_file = input()
odds_file = input()
equals_file = input()

with open(input_file, encoding="UTF-8") as file:
    strings = [string for string in file.read().split("\n") if string]

even_digits = "02468"
odd_digits = "13579"
evens_strings = []
odds_strings = []
equals_strings = []

for string in strings:
    evens, odds, equals = [], [], []

    for number in string.split():
        total_evens = total_odds = 0
        for char in number:
            if char in even_digits:
                total_evens += 1
            elif char in odd_digits:
                total_odds += 1

        if total_evens > total_odds:
            evens.append(number)
        elif total_evens < total_odds:
            odds.append(number)
        else:
            equals.append(number)

    evens_strings.append(' '.join(evens) + '\n')
    odds_strings.append(' '.join(odds) + '\n')
    equals_strings.append(' '.join(equals) + '\n')

with open(evens_file, "w", encoding="UTF-8") as file:
    file.writelines(evens_strings)
with open(odds_file, "w", encoding="UTF-8") as file:
    file.writelines(odds_strings)
with open(equals_file, "w", encoding="UTF-8") as file:
    file.writelines(equals_strings)

Решение

Python
input_file = input()
evens_file = input()
odds_file = input()
equals_file = input()

with open(input_file, encoding="UTF-8") as file:
    strings = [string for string in file.read().split("\n") if string]

even_digits = "02468"
odd_digits = "13579"
evens_string = ''
odds_string = ''
equals_string = ''

for string in strings:
    evens, odds, equals = [], [], []

    for number in string.split():
        total_evens = total_odds = 0
        for char in number:
            if char in even_digits:
                total_evens += 1
            elif char in odd_digits:
                total_odds += 1

        if total_evens > total_odds:
            evens.append(number)
        elif total_evens < total_odds:
            odds.append(number)
        else:
            equals.append(number)

    evens_string += ' '.join(evens) + '\n'
    odds_string += ' '.join(odds) + '\n'
    equals_string += ' '.join(equals) + '\n'

with open(evens_file, "w", encoding="UTF-8") as file:
    file.write(evens_string)
with open(odds_file, "w", encoding="UTF-8") as file:
    file.write(odds_string)
with open(equals_file, "w", encoding="UTF-8") as file:
    file.write(equals_string)
Подписаться
Уведомить о
guest
4 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии