Вопрос задан 20.06.2023 в 07:59. Предмет Информатика. Спрашивает Kidmänsmellikehellandeatyöurfear Sveta.

Во фрагменте текста (текстовый файл) для красоты решили записать все натуральные числа (годы,

номера королей) римскими числами. Известно, что числа там встречаются от 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() ). Пожалуйста учтите, что весь вывод программы будет сравниваться с ответом, не выводите лишние комментарии.​
0 0
Перейти к ответам

Ответы на вопрос

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Ибрагимова Анора.

Ответ:

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

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

0 0
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.

Программа на Python, которая выполняет описанные вами задачи, может выглядеть следующим образом:

```python def arabic_to_roman(arabic_num): roman_numerals = { 1: 'I', 4: 'IV', 5: 'V', 9: 'IX', 10: 'X', 40: 'XL', 50: 'L', 90: 'XC', 100: 'C', 400: 'CD', 500: 'D', 900: 'CM', 1000: 'M' } result = '' for value, numeral in sorted(roman_numerals.items(), key=lambda x: x[0], reverse=True): while arabic_num >= value: result += numeral arabic_num -= value return result

def convert_numbers_in_text(file_path): try: with open(file_path, 'r', encoding='utf-8') as file: text = file.read() lines = text.split('\n') converted_lines = [] for line in lines: words = line.split() converted_words = [] for word in words: try: num = int(word) if 1 <= num <= 3100: converted_words.append(arabic_to_roman(num)) else: converted_words.append(word) except ValueError: converted_words.append(word) converted_lines.append(' '.join(converted_words)) converted_text = '\n'.join(converted_lines) print(converted_text) except FileNotFoundError: print("File not found.")

if __name__ == "__main__": file_path = input("Введите имя текстового файла в кодировке UTF-8: ") convert_numbers_in_text(file_path) ```

Эта программа сначала определяет функцию `arabic_to_roman`, которая преобразует арабские числа в римские. Затем она считывает текст из указанного файла, разбивает его на строки и слова, и заменяет числа, попадающие в диапазон от 1 до 3100, на их римскую запись. Результат выводится на экран.

0 0

Похожие вопросы

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос