# Название программы: AraRom #
# Создатель программы: ramses #
# E-mail создателя: moredarker@yandex.ru #
# ICQ создателя: 622221805 #
# Дата создания: 19 апреля 2011, день #
# Дата последнего изменения: 19 апреля 2011, день #
# ************* #
# Суть программы: Программа переводит арабские числа в римские. #
# Заметки: алгоритм перевода пугает количеством буков и ветвлений. #
# №0 ************* #
def arabic_roman(nums):
def addition(num,length):
def filling(length):
zero = ['','']
i = 1
while i+1 < length:
zero.append(zero[len(zero)-1] + '0')
i += 1
return zero
return num[:2] + filling(length)[length-1-len(num[2:])] + num[2:]
nums = addition('0d'+str(nums), 6)[2:]
results = ''
liters = {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'}
results += liters[1000] * int(nums[0])
if int(nums[1]) == 0:
results += ''
elif 1 <= int(nums[1]) <= 3:
results += liters[100] * int(nums[1])
elif int(nums[1]) == 4:
results += liters[400]
elif int(nums[1]) == 5:
results += liters[500]
elif 6 <= int(nums[1]) <= 8:
results += liters[500] + liters[100] * (int(nums[1])-5)
else:
results += liters[900]
if int(nums[2]) == 0:
results += ''
elif 1 <= int(nums[2]) <= 3:
results += liters[10] * int(nums[2])
elif int(nums[2]) == 4:
results += liters[40]
elif int(nums[2]) == 5:
results += liters[50]
elif 6 <= int(nums[2]) <= 8:
results += liters[50] + liters[10] * (int(nums[2])-5)
else:
results += liters[90]
if int(nums[3]) == 0:
results += ''
elif 1 <= int(nums[3]) <= 3:
results += liters[1] * int(nums[3])
elif int(nums[3]) == 4:
results += liters[4]
elif int(nums[3]) == 5:
results += liters[5]
elif 6 <= int(nums[3]) <= 8:
results += liters[5] + liters[1] * (int(nums[3])-5)
else:
results += liters[9]
return results
# №1 ************* #
while True:
try:
num = int(input('Введите арабское число в диапазоне от 1 до 3999:'))
if 1 <= num <= 3999:
break
else:
print('Число должно быть в диапазоне от 1 до 3999.')
continue
except ValueError:
print('Необходимо задать целое число, а не нечто другое.. Просьба повторить ввод.')
continue
# №2 ************* #
print(arabic_roman(num))
# №3 ************* #
З.Ы. Прощу за прощение за мутную функцию addition - я её просто из другой моей программки выдернул..
А вот с переводом из римских - беда… Никаких мыслей даже нету. Мб подскажите чего?