Предмет: Информатика, автор: srmdvvj624

Во фрагменте текста (текстовый файл) для красоты решили записать все натуральные числа (годы, номера королей) римскими числами. Известно, что числа там встречаются от 1 до 3100. Напишите программу, которая введет с клавиатуры имя текстового файла в кодировке UTF-8, переведет все такие числа в римскую запись (по правилам Шварцмана) и выведет текст с заменой их записи на экран. Учтите, что даты и дробные числа преобразовывать нельзя – хотя цифры там есть. Напоминаем: - Римские целые числа записываются буквами I,V,X и некоторыми другими - Числа написанные с уменьшением значения слева направо - суммируются (VI - 6), с уменьшением справа налево - вычитаются (IX - 9). - Количество символов в записи должно быть минимальным - Больше 3 одинаковых символов подряд писать нельзя.

Обратите внимание: все данные для работы программы поступают из стандартного потока ввода (в Python используется функция input() ), каждый параметр - отдельной строкой. Все результаты выводятся в стандартный поток вывода ( в Python используется функция print() ). Пожалуйста учтите, что весь вывод программы будет сравниваться с ответом, не выводите лишние комментарии.

Ответы

Автор ответа: dmitrhut
0

Ответ:

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)

Объяснение:

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


dmitrhut: код не идеальный, могут быть ненужные строки, так что если шарите - можете подсказать, как сделать его без такого количества ненужной воды
Похожие вопросы
Предмет: Українська мова, автор: azazazazaza4
Предмет: Немецкий язык, автор: Patopka
Предмет: Алгебра, автор: superalinka13