Напишите утилиту, которая разделяет числа, записанные в файле, на три группы:
- числа с преобладающим количеством чётных цифр;
- числа с преобладающим количеством нечётных цифр;
- числа с одинаковым количеством чётных и нечётных цифр.
Формат ввода
Пользователь вводит четыре имени файла.
Первый файл содержит произвольное количество чисел, разделённых пробелами и символами перевода строки.
Формат вывода
В три другие файла выведите числа, которые подходят под требуемое условие.
Сохраните положение чисел в строках.
Пример
Ввод
# Пользовательский ввод:
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().
Посмотреть код
Решение
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")
Решение
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)
Решение
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)