AttributeError: объект «модуль» не имеет атрибута «накапливать» - PullRequest
0 голосов
/ 18 января 2020

После того, как я импортирую itertools, я запускаю itertools.accumulate () в приведенном ниже коде и получаю сообщение об ошибке -

Traceback (most recent call last):
  File "Equal_Stacks.py", line 36, in <module>
    result = equalStacks(h1 , h2 , h3)
  File "Equal_Stacks.py", line 8, in equalStacks
    h11 = itertools.accumulate(h1)
AttributeError: 'module' object has no attribute 'accumulate'

Но когда я запускаю функцию itertools.accumulate () в интерпретаторе работает просто отлично.

import sys
import itertools

def equalStacks(h1 , h2 , h3):
    h11 = itertools.accumulate(h1)

    h22 = itertools.accumulate(h2)

    h33 = itertools.accumulate(h3)

    equal = False
    while not equal:
        if h11[-1] == h22[-1] == h33[-1]:
            equal = True
            break
        else:
            if h11[-1] > h22[-1] and h11[-1] > h33[-1] and len(h11) != 0:
                h11.pop()
            elif h22[-1] > h11[-1] and h22[-1] > h33[-1] and len(h22) != 0:
                h22.pop()
            elif h33[-1] > h11[-1] and h33[-1] > h22[-1] and len(h33) != 0:
                h33.pop()

    return str(h11[-1])

if __name__ == '__main__':
    n1 , n2 , n3 = map( int , sys.stdin.readline().strip().split() )

    h1 = list( map( int, sys.stdin.readline().strip().split() ) )
    h2 = list( map( int, sys.stdin.readline().strip().split() ) )
    h3 = list( map( int, sys.stdin.readline().strip().split() ) )

    result = equalStacks(h1 , h2 , h3)

    _ = sys.stdout.write( result + '\n')

1 Ответ

0 голосов
/ 19 января 2020

Я просто скопировал ваш код в мой редактор, и сначала я получил это, что кажется неправильным:

h11: Iterator
Value 'h11' is unsubscriptablepylint(unsubscriptable-object)

Затем я попытался выполнить ваш код с вводом, и я получил ошибку, похожую на Ваш, но он сказал:

Traceback (most recent call last):
  File "c:/Users/Chechu/Desktop/s.py", line 33, in <module>
    result = equalStacks(h1 , h2 , h3)
  File "c:/Users/Chechu/Desktop/s.py", line 13, in equalStacks
    if h11[-1] == h22[-1] == h33[-1]:
TypeError: 'itertools.accumulate' object is not subscriptable

Как вы видите, линии накопления работают очень хорошо (вы также можете посмотреть документацию ).

Я думаю, что вы не понимаете, что такое итератор, поскольку вы не можете получить доступ к элементам из него. Вы должны выполнить приведение к списку этих итераторов. Ваш код нуждается только:

h11 = list(itertools.accumulate(h1))

h22 = list(itertools.accumulate(h2))

h33 = list(itertools.accumulate(h3))
...