Я пытаюсь понять цикл while
и вызов sorted
в программе, чтобы преобразовать число в римские цифры ниже.
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" }
num = 58 # LVIII
roman = ''
for k, v in sorted(numerals.items(), reverse=True):
while num >= k:
roman += v
num -= k
print(roman)
Вопросы:
1) Почему код не работает, если вместо sorted(numerals.items(), reverse=True)
используется numerals.items()
? (Например, 58 приведет к IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
вместо LVIII
.) Когда используется точка останова на этой строке, похоже, что порядок остается одинаковым как с sorted
.
, так и без него.
2) Первая римская цифра - L
. Зачем? При отладке я заметил, что отсчет начинается с 1000. Когда он достигает 50, я вижу, что roman == 'L'
. Код проверяет, если num >= k
. 1000 (M) также больше 58. Почему условие num >= k
приводит к тому, что L
является первой цифрой?