Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/40: Рейтинг темы: голосов - 40, средняя оценка - 4.73
1 / 1 / 0
Регистрация: 07.05.2020
Сообщений: 22

Перевод в римскую СС

11.10.2021, 11:39. Показов 8835. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Во фрагменте текста (текстовый файл, имя которого вводят с клавиатуры) для красоты решили записать все натуральные числа (годы, номера королей) римскими числами. Известно, что числа там встречаются от 1 до 3100. Переведите все такие числа в римскую запись (по правилам Шварцмана) и выведите текст с заменой их записи на римскую. Учтите, что даты и дробные числа преобразовывать нельзя – хотя цифры там есть. Напоминаем: - Римские целые числа записываются буквами I,V,X и некоторыми другими - Числа написанные с уменьшением значения слева направо - суммируются (VI - 6), с уменьшением справа налево - вычитаются (IX - 9). - Количество символов в записи должно быть минимальным - Больше 3 одинаковых символов подряд писать нельзя.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.10.2021, 11:39
Ответы с готовыми решениями:

Перевод в римскую систему
Помогите написать функцию, которая переводит число в римскую систему счисления, соотношение систем: 1 – I 5 – V 10 – X 50 – L 100...

Сложение и перевод в римскую СС
В двух глобальных переменных one, two находятся два натуральных числа: первое слагаемое и второе слагаемое. Напишите функцию roman(),...

Перевод из арабской в римскую систему исчисления
В двух глобальных переменных one, two находятся два натуральных числа: первое слагаемое и второе слагаемое. Напишите функцию roman(),...

5
Эксперт Python
1356 / 653 / 207
Регистрация: 23.03.2014
Сообщений: 3,057
11.10.2021, 12:36
seytu, подойдет?
Программа
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
def arabic_to_roman_func(n: int) -> str:
    """
    Перевод арабских цифр в римские
    :param n: арабская цира
    :return: римская цифпа, которая соответствует арабской
    >>> arabic_to_roman_func(n=12)
    'XII'
    >>> arabic_to_roman_func(n=8)
    'VIII'
    >>> arabic_to_roman_func(n=5)
    'V'
    >>> arabic_to_roman_func(n=128)
    'CXXVIII'
 
    """
    if isinstance(n, int) and n > 0 and n != 0:
        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
    else:
        raise TypeError('Должно быть введено целое  положительное число, не равное 0')
Тест
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
from unittest import TestCase, main
from tested.arabic_to_roman_package import arabic_to_roman
from tested.arabic_to_roman_package.arabic_to_roman import arabic_to_roman_func
import doctest
 
 
def load_tests(loader, tests, ignore):
    tests.addTests(doctest.DocTestSuite(arabic_to_roman))
    return tests
 
 
class ArabicToRomanTest(TestCase):
    def test_arabic_to_roman_even_ints_two_signs(self):
        self.assertEqual(arabic_to_roman_func(n=12), 'XII')
 
    def test_arabic_to_roman_even_ints_one_sign(self):
        self.assertEqual(arabic_to_roman_func(n=8), 'VIII')
 
    def test_arabic_to_roman_odd_ints_one_sign(self):
        self.assertEqual(arabic_to_roman_func(n=5), 'V')
 
    def test_arabic_to_roman_big_int(self):
        self.assertEqual(arabic_to_roman_func(n=128), 'CXXVIII')
 
    def test_arabic_to_roman_negative_int(self):
        with self.assertRaises(TypeError) as e:
            arabic_to_roman_func(n=-8)
        self.assertEqual('Должно быть введено целое  положительное число, не равное 0', e.exception.args[0])
 
    def test_arabic_to_roman_zero_in_input(self):
        with self.assertRaises(TypeError) as e:
            arabic_to_roman_func(n=0)
        self.assertEqual('Должно быть введено целое  положительное число, не равное 0', e.exception.args[0])
 
    def test_arabic_to_roman_char_in_input(self):
        with self.assertRaises(TypeError) as e:
            arabic_to_roman_func(n='8')
        self.assertEqual('Должно быть введено целое  положительное число, не равное 0', e.exception.args[0])
 
 
if __name__ == '__main__':
    main()
1
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
11.10.2021, 16:23
Вот решение, которое в одной из тем дал Fudthhh,
Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
from __future__ import annotations
 
 
class Roman:
    __map__ = (
        ('M', 1000),
        ('CM', 900),
        ('D', 500),
        ('CD', 400),
        ('C', 100),
        ('XC', 90),
        ('L', 50),
        ('XL', 40),
        ('X', 10),
        ('IX', 9),
        ('V', 5),
        ('IV', 4),
        ('I', 1)
    )
 
    def __init__(self, value: str):
        self.value = value
 
    def __add__(self, other: any) -> Roman:
        if isinstance(other, Roman):
            return Roman(self.to_roman(int(self) + int(other)))
        elif isinstance(other, int):
            return Roman(self.to_roman(int(self) + other))
        return NotImplemented
 
    def __sub__(self, other: any) -> Roman:
        if isinstance(other, Roman):
            return Roman(self.to_roman(int(self) - int(other)))
        elif isinstance(other, int):
            return Roman(self.to_roman(int(self) - other))
        return NotImplemented
 
    def __mul__(self, other: any) -> Roman:
        if isinstance(other, Roman):
            return Roman(self.to_roman(int(self) * int(other)))
        elif isinstance(other, int):
            return Roman(self.to_roman(int(self) * other))
        return NotImplemented
 
    def __div__(self, other: any) -> Roman:
        if isinstance(other, Roman):
            return Roman(self.to_roman(int(self) / int(other)))
        elif isinstance(other, int):
            return Roman(self.to_roman(int(self) / other))
        return NotImplemented
 
    def __str__(self) -> str:
        return self.value
 
    def __int__(self) -> int:
        return self.to_decimal(self.value)
 
    @classmethod
    def to_decimal(cls, value: str) -> int:
        if not value: return 0
        result, index = 0, 0
        for symbol, digit in cls.__map__:
            while value[index:index + len(symbol)] == symbol:
                result += digit
                index += len(symbol)
        return result
 
    @classmethod
    def to_roman(cls, value: int) -> str:
        if value == 0: return ""
        result = ""
        for symbol, digit in cls.__map__:
            while value >= digit:
                result += symbol
                value -= digit
        return result

Задача Римское число
1
11.10.2021, 16:26

Не по теме:

Viktorrus, ууу, кто прошлое помянет! :D

0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
11.10.2021, 16:31
Не тот код выложил. Вот доработанный.
Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
from __future__ import annotations
from typing import Union
 
 
class Roman:
    __map__ = (
        ('M', 1000),
        ('CM', 900),
        ('D', 500),
        ('CD', 400),
        ('C', 100),
        ('XC', 90),
        ('L', 50),
        ('XL', 40),
        ('X', 10),
        ('IX', 9),
        ('V', 5),
        ('IV', 4),
        ('I', 1)
    )
 
    def __init__(self, value: Union[str, int]):
        if isinstance(value, int):
            value = self.to_roman(value)
        self.value = value
 
    def __add__(self, other: Union[Roman, int]) -> Roman:
        if isinstance(other, Roman):
            return Roman(self.to_roman(int(self) + int(other)))
        elif isinstance(other, int):
            return Roman(self.to_roman(int(self) + other))
        return NotImplemented
 
    def __sub__(self, other: Union[Roman, int]) -> Roman:
        if isinstance(other, Roman):
            return Roman(self.to_roman(int(self) - int(other)))
        elif isinstance(other, int):
            return Roman(self.to_roman(int(self) - other))
        return NotImplemented
 
    def __mul__(self, other: Union[Roman, int]) -> Roman:
        if isinstance(other, Roman):
            return Roman(self.to_roman(int(self) * int(other)))
        elif isinstance(other, int):
            return Roman(self.to_roman(int(self) * other))
        return NotImplemented
 
    def __div__(self, other: Union[Roman, int]) -> Roman:
        if isinstance(other, Roman):
            return Roman(self.to_roman(int(self) / int(other)))
        elif isinstance(other, int):
            return Roman(self.to_roman(int(self) / other))
        return NotImplemented
 
    def __str__(self) -> str:
        return self.value
 
    def __int__(self) -> int:
        return self.to_decimal(self.value)
 
    @classmethod
    def to_decimal(cls, value: str) -> int:
        if not value: return 0
        result, index = 0, 0
        for symbol, digit in cls.__map__:
            while value[index:index + len(symbol)] == symbol:
                result += digit
                index += len(symbol)
        return result
 
    @classmethod
    def to_roman(cls, value: int) -> str:
        if value == 0: return ""
        result = ""
        for symbol, digit in cls.__map__:
            while value >= digit:
                result += symbol
                value -= digit
        return result
1
1 / 1 / 0
Регистрация: 07.05.2020
Сообщений: 22
11.10.2021, 21:31  [ТС]
Благодарю всех за ответы!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.10.2021, 21:31
Помогаю со студенческими работами здесь

Перевод из арабской в римскую!
Помогите пожалуйста! Написала программу из римской в арабскую, а наоборот что-то не получается. Нуждаюсь в помощи! using System; ...

Перевод из десятичной в Римскую
Дали курсовую , сдавать уже на днях. Может кто знает как делать? Написать программу перевода чисел из десятичной системы...

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

Перевод из арабской сис. в римскую!
Да, я видел уже существующие темы на этот вопрос. Но нигде нету перевода чисел 10 000+ везде до 1000. Так вот проблема в том что 10 000 =...

Перевод из десятичной системы в римскую
Напишите программу, которая выводит запись заданного десятичного числа, не превосходящего 3999, в римской системе счисления.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru