LINUX.ORG.RU

python, учеба, списки.

 ,


1

1

Решаю задачу с римскими цифрами. Надо проверить, число в списке меньше следующего или нет. Если да, провести вычитание. Может есть встроенное что-то для таких случаев? Или брать enumerate? Надо поспать, наверное.

Начни с перевода римских чисел в бинарное представление и будет удобнее сравнивать и работать, а затем «выгрузка» опять в римские.

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

Я сделал.
Тут такое условие: если перед большой римской стоит маленькая - то это вычитание. У меня переведенный список на арабские. Теперь надо пройтись, сравнить, если да - то вычесть и записать результат, результат просуммировать.

masterdilly
() автор топика
Ответ на: комментарий от masterdilly

Не до конца понял что ты делаешь, но попробуй плясать от этого

[prev - lead if prev > lead else prev for prev, lead in zip(lst, lst[1:])]

Соотвественно lst список твоих чисел

Dred ★★★★★
()
Последнее исправление: Dred (всего исправлений: 1)

Сумма разниц

from functools import reduce

...
# a - prepared array

res = reduce(
    lambda y, x: y + x,
    [(a[i + 1] - x) if (a[i + 1]) > x else 0 for i, x in enumerate(a[:-1])],
    0)

Футы-нуты, загнался совсем

Upd.

sum([(a[i + 1] - x) if (a[i + 1]) > x else 0 for i, x in enumerate(a[:-1])])

vvn_black ★★★★★
()
Последнее исправление: vvn_black (всего исправлений: 1)
Ответ на: комментарий от vvn_black

Оно.Тут один момент. Мы в конце (enumerate) сделали копию? или просто добавили цифры ко всем элементам списка, кроме последнего?

masterdilly
() автор топика
Ответ на: комментарий от masterdilly

Это новый список с разницами, без первого элемента [3, 1, 3, 5, 3] -> [0, 2, 2, 0].

Upd. Я похоже вопрос не понял. enumerate генерирует пару (индекс, значение). В данном случае проходим по исходному массиву без последнего элемента.

vvn_black ★★★★★
()
Последнее исправление: vvn_black (всего исправлений: 1)
Ответ на: комментарий от masterdilly

если перед большой римской стоит маленькая - то это вычитание

не все сочетания корректны. просто задай таблицу:

[X -> 10, IX -> 9, V -> 5, IV -> 4, I -> 1]

MyTrooName ★★★★★
()
Ответ на: комментарий от masterdilly

да, если правильно понял, о чем ты. есть несколько вариантов, как это обойти. но это уже твоя работа ;)

MyTrooName ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.