Найти - Пользователи
Полная версия: Обращение к следующему символу стоки.
Начало » Python для новичков » Обращение к следующему символу стоки.
1 2 3
Rodegast
Для того что бы оно заработало без ошибок надо предварительно сложить в stek-е идущие подряд числа, но этим пусть ТС занимается.
py.user.next
Rodegast
надо предварительно сложить в stek-е идущие подряд числа
Ну, вот в примере идут четыре единицы подряд.
Rodegast
> Ну, вот в примере идут четыре единицы подряд.

Ну значит в примере ошибка. Вот что имелось в виду:
>>> a = "MCMLXXXVIII"
>>> stek = [ ds[x] for x in a ]
>>> reduce(lambda x, y: x - y if x > y else x + y, stek[::-1])
1966 # Не правильно
>>> stek
[1000, 100, 1000, 50, 10, 10, 10, 5, 1, 1, 1] 
>>> stek = [1000, 100, 1000, 50, 30, 5, 3]
>>> reduce(lambda x, y: x - y if x > y else x + y, stek[::-1])
1988 # Правильно
py.user.next
Rodegast
Ну значит в примере ошибка.
Да, ошибка там.
Vigi
а поиск уже не работает ?…

CONV_TABLE = ((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'))
def roman_to_arab(txt):
    txt = txt.upper()
    ret = 0
    for arab, roman in CONV_TABLE:
        while txt.startswith(roman):
            ret += arab
            txt = txt[len(roman):]
    return ret
a = 'MCMLXXXVIII'
print(roman_to_arab(a))
Rodegast
Как бы запихивать все варианты в CONV_TABLE не комильфо, а без этого точно переводить не будет:
>>> roman_to_arab("VM")
5 # Должно быть 995
Vigi
995 = CMXCV нет разве?
Rodegast
> 995 = CMXCV нет разве?

Не обязательно. Сейчас распространены упрощённые записи чисел.
HarrySpoter
py.user.next
Сначала выясняешь длину, а потом читаешь по два символа.
При этом второй не должен выйти за край строки (проверка по вычисленной длине).
num = {
	'I': 1, 
	'V': 5, 
	'X': 10, 
	'L': 50, 
	'C': 100, 
	'D': 500, 
	'M': 1000}
total = 0
a = input()
a.upper()
for i in a:
	for j in range(a.index(i)+1, len(a)):
		if num.get(i) < num.get(a[j]):
			total -= num.get(i)
			break
	else:
		total += num.get(i)
print(total)

всё работает, спасибо
HarrySpoter
Возможно, такая записать не очень хорошая на питоне? Может кто исправит?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB