Вопрос задан 20.06.2023 в 07:52. Предмет Информатика. Спрашивает Новикова Анастасия.

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

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

Объяснение:

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

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

Для решения этой задачи мы можем использовать язык программирования Python. Программа должна прочитать текстовый файл, заменить натуральные числа на их римскую запись и вывести измененный текст.

Вот пример программы на Python:

```python def arabic_to_roman(number): # Функция для перевода арабского числа в римское val = [ 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 ] syb = [ "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" ] roman_num = '' i = 0 while number > 0: for _ in range(number // val[i]): roman_num += syb[i] number -= val[i] i += 1 return roman_num

def process_text(file_name): try: with open(file_name, 'r', encoding='utf-8') as file: text = file.read() words = text.split() for i in range(len(words)): try: # Пробуем преобразовать слово в число num = int(words[i]) if 1 <= num <= 3100: # Заменяем число на римскую запись roman_num = arabic_to_roman(num) words[i] = roman_num except ValueError: # Если не удалось преобразовать в число, пропускаем pass result_text = ' '.join(words) print(result_text) except FileNotFoundError: print("Файл не найден")

if __name__ == "__main__": file_name = input("Введите имя текстового файла: ") process_text(file_name) ```

Как работает программа: 1. Сначала она открывает файл и читает его содержимое. 2. Затем текст разбивается на слова, и каждое слово проверяется на то, является ли оно числом. 3. Если слово - число в диапазоне от 1 до 3100, то оно заменяется на его римскую запись. 4. Результат выводится на экран.

Примечание: Для удобства я добавил обработку исключений (например, FileNotFoundError), чтобы программа была более устойчивой к возможным ошибкам.

0 0

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

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

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

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