Пользователь вводит с клавиатуры число от 1 до 100. Требуется
перевести это число в римскую систему счисления.
Можно использовать только if (Python)!!!
Python
Задача по языку Python
На всяких стэковерфлоу полно готовых решений этой стандартной задачи
https://ru.stackoverflow.com/questions/1484878/Перевод-из-арабских-в-римские-числа
Алгоритм там не хитрый. Тем более если от 1 до 100.
Если наоборот из римских в арабские - там чуть посложнее будет.
Например разберем вот это
9 - 9 = 0
https://ru.stackoverflow.com/questions/1484878/Перевод-из-арабских-в-римские-числа
Алгоритм там не хитрый. Тем более если от 1 до 100.
Если наоборот из римских в арабские - там чуть посложнее будет.
Например разберем вот это
roman_numbers = {'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 to_roman(number):
roman = ''
for letter, value in roman_numbers.items():
while number >= value:
roman += letter
number -= value
return roman
print(to_roman(19))
Хотим перевести 19. Цикл бежит по словарю. Нашел в словаре первое значение которое меньше 19. Это 10. В пустую строку помещаем его ключ - X. От 19 отнимаем это найденное значение 10. Получаем 9. Второе значение которое меньше или равно 9 - собственно 9. К строке присоединяем его ключ из словаря - IX. И получаем наше XIX. 9 - 9 = 0
Надеюсь, запрет использовать всё, кроме if, не распространяется на арифметику, операции со списками и ввод-вывод? Трудновато будет реализовать всё это на одних лишь if.
Вот, примитивно и громоздко, но с одними лишь if-ами, как требовалось:
Для сравнения, человеческий алгоритм без всяких ifов, и работает с числами до 4000:
Вот, примитивно и громоздко, но с одними лишь if-ами, как требовалось:
n = int(input())
if not (1 = 40: n -= 50; rs.append('L')
if n < 0: n += 10; rs.insert(-1, 'X')
if n >= 39: n -= 40; rs.extend('XXXX')
if n >= 29: n -= 30; rs.extend('XXX')
if n >= 19: n -= 20; rs.extend('XX')
if n >= 9: n -= 10; rs.append('X')
if n >= 4: n -= 5; rs.append('V')
if n < 0: n += 1; rs.insert(-1, 'I')
if n >= 3: n -= 3; rs.extend('III')
if n >= 2: n -= 2; rs.extend('II')
if n >= 1: n -= 1; rs.append('I')
print(''.join(rs))
Для сравнения, человеческий алгоритм без всяких ifов, и работает с числами до 4000:
def digits(tup):
o, f, t = tup
return (
'', o, o * 2, o * 3, o + f, # 0-4
f, f + o, f + o * 2, f + o * 3, o + t # 5-9
)
n = int(input())
print(''.join((map(tuple.__getitem__, map(digits,
(('M', '?', '?'), ('C', 'D', 'M'), ('X', 'L', 'C'), ('I', 'V', 'X'))),
sum(map(divmod, divmod(n, 100), (10,) * 2), ())
))))
Программу на if-ах для этого диапазона потребовалось бы удвоить.n = int(input("Введите число от 1 до 100: "))
if n < 1 or n > 100:
print("Число должно быть от 1 до 100!")
else:
roman_numeral = ""
if n >= 90:
roman_numeral += "XC"
n -= 90
if n >= 50:
roman_numeral += "L"
n -= 50
if n >= 40:
roman_numeral += "XL"
n -= 40
if n >= 10:
roman_numeral += "X" * (n // 10)
n %= 10
if n == 9:
roman_numeral += "IX"
n -= 9
if n >= 5:
roman_numeral += "V"
n -= 5
if n == 4:
roman_numeral += "IV"
n -= 4
if n >= 1:
roman_numeral += "I" * n
print
("Результат:", roman_numeral)
if n < 1 or n > 100:
print("Число должно быть от 1 до 100!")
else:
roman_numeral = ""
if n >= 90:
roman_numeral += "XC"
n -= 90
if n >= 50:
roman_numeral += "L"
n -= 50
if n >= 40:
roman_numeral += "XL"
n -= 40
if n >= 10:
roman_numeral += "X" * (n // 10)
n %= 10
if n == 9:
roman_numeral += "IX"
n -= 9
if n >= 5:
roman_numeral += "V"
n -= 5
if n == 4:
roman_numeral += "IV"
n -= 4
if n >= 1:
roman_numeral += "I" * n
("Результат:", roman_numeral)
Похожие вопросы
- Помогите решить задачу на языке Python пожалуйста!
- Помогите решить задачу на языке Python (без использования библиотек)
- Задача на языке python
- Можно ли такое написать на компьютерном языке PYTHON
- Программирование на языке python, помогите советом. Вопрос от чайника.
- Подскажите ресурс\книги с примерами по высшей математике и их решений на языке Python
- Какие задачи можно решать, используя язык Python? Выберите правильные утверждения !
- Задача на тему циклов по программированию на языке Python, помогите.
- Что такое переменные и типы данных в языке python
- Очень понравился язык Python, нужны ли на рынке труда узкие специалисты со знанием только одного языка?
Методология разработки от клуба "программистуматематиканенужнаааа".
Кстати, чатгпт использует точно такой же подход. Надо объяснять, кто кого заменит? :-)
M 1000 19 False
19 < 1000
CM 900 19 False
19 < 900
D 500 19 False
19 < 500
CD 400 19 False
19 < 400
C 100 19 False
19 < 100
XC 90 19 False
19 < 90
L 50 19 False
19 < 50
XL 40 19 False
19 < 40
X 10 19 True
19 >= 10
19 10 True
roman X
IX 9 9 True
9 < 9
9 9 True
roman XIX
V 5 0 False
0 < 5
IV 4 0 False
0 < 4
I 1 0 False
0 < 1
XIX