Застрял в преобразовании целых чисел в римлян - PullRequest
0 голосов
/ 24 января 2020

Я пытаюсь преобразовать целые числа в римские цифры, используя для l oop. Я запустил код, но в данный момент я застрял здесь, я не знаю, что делать (постоянно получаю ошибки). Если у кого-либо есть идеи о том, как продолжить этот код, помощь будет принята с благодарностью.

roman_digits = {1000: "M", 900: "CM", 500: "D", 400: "CD", 100: "C", 90: "XC", 50: "L", 40: "XL", 10: "X", 9: "IX", 5: 'V', 4: "IV", 1: "I"}

empty = ""
rand_num = 153

for nums, alpha in roman_digits.items():
    if rand_num <= nums:
        empty += alpha
        rand_num -= nums

print(empty)

этот код не работает

Ответы [ 2 ]

2 голосов
/ 24 января 2020

Я адаптировал код, который нашел ЗДЕСЬ , чтобы работать вне его класса. Логика c все объясняется на сайте.

rand_num = 153

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  rand_num > 0:
    for _ in range(rand_num // val[i]):
        roman_num += syb[i]
        rand_num -= val[i]
    i += 1
print(roman_num)
1 голос
/ 24 января 2020

Ваш алгоритм должен изменить значение входного числа в некоторой точке. Например, при вводе типа 1053 на первой итерации вы обнаружите M. На данный момент вас больше не интересует место 1000 - вам нужен отдых - 53. Таким образом, вы можете добавить M к вашему выводу и продолжить поиск 53. Затем вы найдете L и продолжите поиск 3. Нечто подобное может привести в правильное русло:

def rn(rand_num):
    empty = ""

    while rand_num > 0:
        for nums, alpha in roman_digits.items():
            if rand_num >= nums:
                empty += alpha
                rand_num -= nums  # change rand_nums
                break

    return empty
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...