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

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

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

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


matvey2207spam: я короче в ответе напишу примерный код, ты подправишь что не так
srmdvvj624: ок
srmdvvj624: если что я
srmdvvj624: тебе отправлю вопрос
srmdvvj624: что-бы баллы получил
srmdvvj624: спасибо огромное
matvey2207spam: я ответил
srmdvvj624: привет ещё раз
srmdvvj624: У меня есть вопрос, если не занят сможешь отметить
srmdvvj624: Есть текстовый файл, в котором встречаются натуральные шестнадцатеричные числа. Их запись начинается с 0x и использует большие латинские буквы. (Например, 0x1A). Других чисел в файле нет. К сожалению, некоторые числа записаны неправильно - пропущено 0x. Иногда после 0x записано не число. Напишите программу, которая введет с клавиатуры имя текстового файла и выведет на экран из текста шестнадцатеричные числа, добавив, где нужно, 0x {сможешь решить пж}

Ответы

Автор ответа: matvey2207spam
7

Ответ:

import re

text = open('имяфайла.txt', 'r', encoding='utf8').read()

#как-то получаем текст, например из файла

def convert(n):

   result = ''

   for arabic, roman in zip((1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1),

                            'M     CM   D    CD   C    XC  L   XL  X   IX V  IV I'.split()):

       result += n // arabic * roman

       n %= arabic

   return result

for num in re.findall(' \d+ *', text):

   n = int(num.strip())

   if n < 1 or n > 3100: continue

   text = text.replace(num, ' ' + convert(n) + ' ' if num.endswith(' ') else '')

   

print(text)

Объяснение:

получаем текст

с помощью регекса ищем цифры с пробелами перед и возможно после цифры

т.е. отсеиваем дробные числа и даты

далее отсеиваем числа которые не от 1 до 3100

потом конвертируем число в римские, и печатаем результат


srmdvvj624: спс
Похожие вопросы
Предмет: Русский язык, автор: olgaOlga7777
Предмет: История, автор: TheFoxiEnds