Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/34: Рейтинг темы: голосов - 34, средняя оценка - 4.76
0 / 0 / 3
Регистрация: 11.12.2016
Сообщений: 137
1

В строке записано десятичное число. Записать данное число римскими цифрами

26.09.2019, 14:12. Показов 6601. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
подвох задачи в том что -> Делать задачи двумя способами - один: "в лоб", без стандартных встроенных функций по строкам; второй - как умные программисты с ними

я делал вот так:
Кликните здесь для просмотра всего текста

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Rome =   ["I", "IV", "V", "IX", "X", "XL", "L", "XC", "C", "CD", "D", "CM", "M"]
Arabic = [1,    4,    5,   9,   10,   40,  50,   90,  100, 400,  500,  900, 1000]
i = 12
res = ''
 
num = input('вводите дестичное число "1>число<3999"->')
if not num.isdigit() or 1<int(num)>3999:
    print('Только арабские цифры!!Сука блять твою мать!!!!')
else:
    while int(num) > 0:
        while Arabic[i] > int(num):
            i = i - 1
            #print('i=',i)
            #print('Arabic[i]=',Arabic[i])
        res = res + Rome[i]
        #print('res=', res)
        num = int(num) - Arabic[i]
        #print('num=', num)
 
    print(res)
#print('\nТипо я умный \'программист\':\n')


вопрос а как бы сделал умный программист ?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.09.2019, 14:12
Ответы с готовыми решениями:

Вывести данное число, записанное римскими цифрами
Вводится число от 1 до 10. Вывести данное число, записанное римскими цифрами (I, II, III, IV, V,...

Записать данное число (от 1 до 3999) римскими цифрами
Написать программу,записывающую данное число в интервале от 1 до 3999 Римскими цифрами. I – 1 V –...

Записать данное целое число из диапазона от 1 до 1999 римскими цифрами
Записать данное целое число из диапазона от 1 до 1999 римскими цифрами

Пусть число записано римскими цифрами, выведите его запись арабскими цифрами
Помогите сделать, пожалуйста)!!! 1) Пусть число записано римскими цифрами: М — 1000, D — 500, С —...

Вводится число от 1 до 15. Вывести данное число, записанное римскими цифрами
Вводится число от 1 до 15. Вывести данное число, записанное римскими цифрами (I, II, III, IV, V,...

7
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
26.09.2019, 14:53 2
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
def checkio(data):
    ones = ["", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"]
    tens = ["", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"]
    hunds = ["", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"]
    thous = ["", "M", "MM", "MMM", "MMMM"]
 
    t = thous[data // 1000]
    h = hunds[data // 100 % 10]
    te = tens[data // 10 % 10]
    o = ones[data % 10]
 
    result = t + h + te + o
    print(result)
    return result
 
data = int(input())
checkio(data)
 
>>>2345
>>>MMCCCXLV
1
Модератор
Эксперт Python
2689 / 1595 / 513
Регистрация: 21.02.2017
Сообщений: 4,209
Записей в блоге: 1
26.09.2019, 16:33 3
Damenikx, Тебе не кажется что тут слишком много повторений?
0
Автоматизируй это!
Эксперт Python
7107 / 4610 / 1215
Регистрация: 30.03.2015
Сообщений: 13,236
Записей в блоге: 29
26.09.2019, 16:34 4
Лучший ответ Сообщение было отмечено Руслан997 как решение

Решение

Руслан997, как минимум нужно без мата в комментах. Вот тебе вариант, на миллионе обращений к выполнению всех ассертов почти в 2 раза быстрее твоего варианта, 1 цикл.
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
TEMPLATE = ['d', 'dd', 'ddd', 'dm', 'm', 'md', 'mdd', 'mddd', 'du', 'u']
RANKS = {1: ['I', 'V', 'X'], 2: ['X', 'L', 'C'], 3: ['C', 'D', 'M'], 4: ['M', 'W', 'Y']}
 
 
def to_roman(value: int) -> str:
    if value > 3999 or value < 1:
        raise ValueError(f'Only integers allowed form 1 to 3999, but got {value}')
    str_value = str(value)
    result = ''
    for index, num in enumerate(str_value):
        if num == '0':
            continue
        rank = len(str_value) - index
        down, middle, up = RANKS[rank]
        result += TEMPLATE[int(num) - 1].replace('d', down).replace('m', middle).replace('u', up)
    return result
 
 
assert to_roman(1) == 'I'
assert to_roman(8) == 'VIII'
assert to_roman(12) == 'XII'
assert to_roman(43) == 'XLIII'
assert to_roman(139) == 'CXXXIX'
assert to_roman(850) == 'DCCCL'
assert to_roman(1000) == 'M'
assert to_roman(900) == 'CM'
assert to_roman(3999) == 'MMMCMXCIX'
1
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
26.09.2019, 16:49 5
DmFat, я не претендую на "лучший код", просто подбросил вариант
0
0 / 0 / 3
Регистрация: 11.12.2016
Сообщений: 137
26.09.2019, 18:12  [ТС] 6
Цитата Сообщение от Welemir1 Посмотреть сообщение
TEMPLATE = ['d', 'dd', 'ddd', 'dm', 'm', 'md', 'mdd', 'mddd', 'du', 'u']
спасибо, но я не понял что это !
0
Автоматизируй это!
Эксперт Python
7107 / 4610 / 1215
Регистрация: 30.03.2015
Сообщений: 13,236
Записей в блоге: 29
26.09.2019, 18:28 7
Руслан997, а это шаблон вычислений, все римские числа формируются по одному шаблону, можно его было и более кратко и обще наверное сделать, но я подумал, что для данного примера пойдет. d - минимальная цифра, m - средняя цифра u- максимальная цифра.Данные разряды лежат в RANKS
Подставляя в такой шаблон числа из любого разряда мы можем получить нужное число.

пример, число 22
1) начинаем слева и берем самый большой разряд, это 2 (20)
2 ) для 2 разряда у нас ['X', 'L', 'C']
3) теперь смотрим как получить 2, беря из шаблона второй элемент то есть 'dd'
4) получаем что для формирования числа 2 во втором разряде нам надо поставить рядом два минимальных числа этого разряда то есть XX (минимальное значение мы берем из пункта 2)
5) теперь идем дальше к числу 2 (у нас ведь 22), оно в 1 разряде, его набор ['I', 'V', 'X']
6) из пункта 3 мы уже знаем что для получения числа 2 ('dd') нам надо два минимума для этого разряда то есть II
получаем XXII
1
0 / 0 / 3
Регистрация: 11.12.2016
Сообщений: 137
26.09.2019, 18:35  [ТС] 8
Welemir1, спасибо, очень интересный способ
0
26.09.2019, 18:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.09.2019, 18:35
Помогаю со студенческими работами здесь

Вводится число от 1 до 10. Вывести данное число, записанное римскими цифрами (I, II, III, IV, V, VI, …., X) и словами
Вводится число от 1 до 10. Вывести данное число, записанное римскими цифрами (I, II, III, IV, V,...

Пользователь вводит с клавиатуры натуральное число не большее 999, программа должна вывести на экран данное число, записанное римскими цифрами
Пользователь вводит с клавиатуры натуральное число не большее 999, программа должна вывести на...

Записать число римскими цифрами
Ребята, прошу помощи, больше некуда обратиться, помогите в написании программы. Для записи...

Записать число римскими цифрами
я нифига не знаю про паскаль но прошу помогите нужно сделать из десятичных цифрах римские с помощью...

Записать число n римскими цифрами (n<3999)
Для записи римскими цифрами используются символы I, V, X, L, С, D, М, обозначающие соответственно...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru