@HrustHr

Почему скрипт выдает разные результаты?

у меня есть скрипт который вычитает значения ряда_2 из значений ряда три:
Пример 1:


series_3 =123456701234567

вычитаю из него series_2=13567134567

получаю ряд 2402,

делаю обратное вычисление, вычитаю из series_3, 2402, получаю:

series_3 -2402 = 13567134567

т.е. все нормально, перестановочный закон работает без проблем, что и требуется.

Пример2:
Но , когда я заменяю ряды на :

series_3 = 101010101010101


series_2 = 1101100100

получаю результат = 00111

делаю обратное вычисление, вычитаю из series_3 00111, получаю:

series_3 - 00111 = 1100010101
и результат Не равен 1101100100 !

как сделать , что бы результаты работы, в примере два, стали равны и перестановочный закон работал, так же , как он работает при использовании рядов 123456701234567,13567134567 и 2402 ? где может быть ошибка в коде ?

Спасибо.





скрипт:

# ТРЕТИЙ РЯД
series_3 = "123456701234567"
# ВТОРОЙ РЯД
series_2 = "13567134567"

def subtract_series(series_1, series_2):
    result = ""
    idx_1 = 0
    idx_2 = 0
    
    while idx_1 < len(series_1) and idx_2 < len(series_2):
        if series_1[idx_1] == series_2[idx_2]:
            idx_1 += 1
            idx_2 += 1
        else:
            result += series_1[idx_1]
            idx_1 += 1

    result += series_1[idx_1:]
    return result

result = subtract_series(series_3, series_2)
print(result,len(result))
  • Вопрос задан
  • 322 просмотра
Пригласить эксперта
Ответы на вопрос 4
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Прежде, чем искать ошибку в коде, вам надо аналитически доказать, что вводимая вами операция обладает нужными свойствами. Нужные инструменты - бумага, карандаш, резинка, голова.
Ответ написан
@kalapanga
Для начала нужно дать точное определение Вашей операции "вычитания"
Очевидно, что Вы убираете из ряда-"уменьшаемого" элементы, присутствующие в ряде-"вычитаемом". Если это все правила, то в результате обоих вычитаний получится только одинаковый набор элементов, но не последовательность. У Вас так и получилось - в обоих случаях в результате есть 5 единиц и 5 нулей. А чтобы эти элементы ещё и в одинаковой последовательности были, нужно дорабатывать правила этой самой операции вычитания.
Ответ написан
Комментировать
@dmshar
А причем тут код? Это вы намудрили какую-то операцию, от которой требуете чего-то невозможного. Возьмите простейший пример
series_3 = '1101'
series_2 = '110'
Согласно вашей чудо операции имеем результат '1'

Теперь делаем "симметричную" по вашему мнению операцию:
series_3 = '1101'
series_2 = '1'
Получаем '101'

Что не так?
Ответ написан
@EDIsaev
Всё логично, такое поведение ожидаемо. Ошибка сидит перед монитором)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы