Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 29, 2016 13:45:17

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2849
Репутация: +  186  -
Профиль   Отправить e-mail  

Обращение к следующему символу стоки.

Для того что бы оно заработало без ошибок надо предварительно сложить в stek-е идущие подряд числа, но этим пусть ТС занимается.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#2 Фев. 29, 2016 14:29:55

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10031
Репутация: +  857  -
Профиль   Отправить e-mail  

Обращение к следующему символу стоки.

Rodegast
надо предварительно сложить в stek-е идущие подряд числа
Ну, вот в примере идут четыре единицы подряд.



Офлайн

#3 Фев. 29, 2016 15:21:51

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2849
Репутация: +  186  -
Профиль   Отправить e-mail  

Обращение к следующему символу стоки.

> Ну, вот в примере идут четыре единицы подряд.

Ну значит в примере ошибка. Вот что имелось в виду:

>>> 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 # Правильно



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Отредактировано Rodegast (Фев. 29, 2016 15:26:55)

Офлайн

#4 Фев. 29, 2016 16:01:36

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10031
Репутация: +  857  -
Профиль   Отправить e-mail  

Обращение к следующему символу стоки.

Rodegast
Ну значит в примере ошибка.
Да, ошибка там.



Офлайн

#5 Фев. 29, 2016 16:18:08

Vigi
От: Курья, Алтай
Зарегистрирован: 2015-02-07
Сообщения: 144
Репутация: +  8  -
Профиль   Отправить e-mail  

Обращение к следующему символу стоки.

а поиск уже не работает ?…

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))

Офлайн

#6 Фев. 29, 2016 16:34:27

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2849
Репутация: +  186  -
Профиль   Отправить e-mail  

Обращение к следующему символу стоки.

Как бы запихивать все варианты в CONV_TABLE не комильфо, а без этого точно переводить не будет:

>>> roman_to_arab("VM")
5 # Должно быть 995



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#7 Фев. 29, 2016 16:41:12

Vigi
От: Курья, Алтай
Зарегистрирован: 2015-02-07
Сообщения: 144
Репутация: +  8  -
Профиль   Отправить e-mail  

Обращение к следующему символу стоки.

995 = CMXCV нет разве?

Офлайн

#8 Фев. 29, 2016 16:59:38

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2849
Репутация: +  186  -
Профиль   Отправить e-mail  

Обращение к следующему символу стоки.

> 995 = CMXCV нет разве?

Не обязательно. Сейчас распространены упрощённые записи чисел.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Отредактировано Rodegast (Фев. 29, 2016 17:01:03)

Офлайн

#9 Март 5, 2016 04:55:11

HarrySpoter
Зарегистрирован: 2016-01-02
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Обращение к следующему символу стоки.

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)

всё работает, спасибо

Офлайн

#10 Март 5, 2016 04:58:27

HarrySpoter
Зарегистрирован: 2016-01-02
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Обращение к следующему символу стоки.

Возможно, такая записать не очень хорошая на питоне? Может кто исправит?

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version