Предполагается, что функция выводит все битовые вектора длиной n бит и содержат k единиц. Проблема в том, что я не могу дать пустой список на вход функции.
Я работаю над Ubuntu и использую Python 3.6. Я также пытался использовать непустой список, например [1], но это выдает ту же ошибку. При попытке найти длину пустого списка вне функции работает как надо: len([]) возвращает 0.
Вот мой код:
def bitvector(n, k, vektor):
if len(vektor) == n:
if vektor.count(1) == k:
print(vektor)
bitvector(n, k, vektor.append(0))
bitvector(n, k, vektor.append(1))
bitvector(1, 2 , [])
РЕДАКТИРОВАТЬ:
def bitvector(n, k, vektor):
if len(vektor) > n:
return
if len(vektor) == n:
print("test")
if vektor.count(1) == k:
print(vektor)
return
bitvector(n, k, vektor.append(1))
bitvector(n, k, vektor.append(0))
bitvector(1, 2 , [])
Он должен получить длину списка, но вместо этого выдает следующую ошибку:
TypeError: объект типа «NoneType» не имеет len()
vektor
is None - это не[]
, как вы ожидаете - person rdas   schedule 27.09.2019vektor.append
возвращаетNone
, а не обновленное значениеlist
. Вместо этого передайтеvecktor + [0]
в качестве аргумента. (Или убедитесь, что ваша рекурсивная функция будет работать правильно, если вы измените аргумент.) - person chepner   schedule 27.09.2019vektor + [0]
иvektor + [1]
. - person Poojan   schedule 27.09.2019vektor
может бытьlist
илиNone
, вы можете протестироватьif len(vektor or []): ...
, чтобы вы всегда могли обрабатывать список - person Juraj Bezručka   schedule 27.09.2019TypeError
будет разрешен.print
не выходитreturn
из функции - person C.Nivs   schedule 27.09.2019.append
, ваш код будет работать вечно, ничего не печатая, потому чтоbitvector(1, 2 , [])
вызоветbitvector(1, 2 , [0])
, который вызоветbitvector(1, 2 , [0, 0])
и т. д., и за конечное время не будет добавлено ни одной единицы. (Вы не должны делать рекурсивные вызовы, еслиlen(vektor)>=n
, мне кажется.) - person Leporello   schedule 27.09.2019