Во фрагменте текста (текстовый файл) для красоты решили записать все натуральные числа (годы, номера королей) римскими числами. Известно, что числа там встречаются от 1 до 3100. Напишите программу, которая введет с клавиатуры имя текстового файла в кодировке UTF-8, переведет все такие числа в римскую запись (по правилам Шварцмана) и выведет текст с заменой их записи на экран. Учтите, что даты и дробные числа преобразовывать нельзя – хотя цифры там есть. Напоминаем: - Римские целые числа записываются буквами I,V,X и некоторыми другими - Числа написанные с уменьшением значения слева направо - суммируются (VI - 6), с уменьшением справа налево - вычитаются (IX - 9). - Количество символов в записи должно быть минимальным - Больше 3 одинаковых символов подряд писать нельзя.
Обратите внимание: все данные для работы программы поступают из стандартного потока ввода (в Python используется функция input() ), каждый параметр - отдельной строкой. Все результаты выводятся в стандартный поток вывода ( в Python используется функция print() ). Пожалуйста учтите, что весь вывод программы будет сравниваться с ответом, не выводите лишние комментарии.
Ответы
Ответ:
import re
def checkio(n): #перевод арабских чисел в римские
result = ''
for arabic, roman in zip((1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1),
'M CM D CD C XC L XL X IX VIII VII VI V IV III II I'.split()):
result += n // arabic * roman
n %= arabic
return result
def chisla(n): #поиск всех чисел в тексте
l = len(n)
integ = []
i = 0
while i < l:
s_int = ''
a = n[i]
while '0' <= a <= '9':
s_int += a
i += 1
if i < l:
a = n[i]
else:
break
i += 1
if s_int != '':
integ.append(int(s_int))
return integ
text = ''
fail = input()
with open(fail, 'r', encoding='utf-8') as text_file: #сохранение текста из файла в переменную text
tekst = text_file.readlines()
for stroka in tekst:
text += stroka
num = chisla(text)
for i in num: #замена всех арабских чисел на римские
rep = checkio(i)
text = text.replace(str(i), rep)
print(text)
Объяснение:
я короче хз, что сайту не нравится, но мой код работает адекватно. И не забудь создать папку с нужным тебе названием в том же самом месте, где лежит файл с кодом