@Moeshka

Как исправить ошибки?

Нужно выводить например для n=5
5
2+3
1+4
1+2+2
1+1+3
1+1+1+2
1+1+1+1+1
У меня же выводит неверные данные,где у меня ошибки в коде ?

n = int(input())
A=[n]
print (n)
def k(A):
    s=0
    d=0
    p=0
    r=0
    bool_res = bool(A)
    if bool_res:
        if len(A)==1:
            r=A[-1]//2
            p=A[-1]-r
            A.pop()
            A.append(r)
            A.append(p)
            print(A)
            input()
        else:
            while A[-1]!=1:
                for i in range(len(A)):
                    if A[i]>1 and i!=len(A):
                        A[i-1]-=1
                        A[i]+=1
                    else:
                        if i!=len(A)  :
                            i=i+1
                        else:
                            if i==len(A):
                                d=A[i]
                                s=A[i]//2
                                A.pop()
                                A.append(s)
                                A.append(d-s)
    return bool_res
while k(A):
        for i in range(len(A)):
            print(A[i],end='')
            if len(A)-i>1:
            	print(end="+")
        print()
  • Вопрос задан
  • 133 просмотра
Пригласить эксперта
Ответы на вопрос 3
longclaps
@longclaps
Ваш код - полная чепуха, ошибка нанизывается на ошибку, не вижу смысла их перечислять. Вот так примерно это делается:
def partition(cap, lim):
    if cap <= lim:
        yield (cap,)
    for head in range(min(cap - 1, lim), 0, -1):
        for tail in partition(cap - head, head):
            yield (head,) + tail

for p in partition(5, 5):
    print('+'.join(map(str, p)))

А вам следует приложить усилия к освоению основ языка - там у вас пока всё плохо.
Ответ написан
@NaName
В списке А один элемент в начале. после вызова A.pop() единственный элемент удаляется, поэтому while делает только одну итерацию. а вообще неправильные названия переменных и метода. имхо, это больше чем извращение называть переменные и методы одной буквой
Ответ написан
Комментировать
@andreyNN
решение longclaps сильно лучше этого.
это попытка придумать код, который мог написать человек не знающий map, yield,join и понятие рекурсии
в остальных случаях воспользуйтесь решением longclaps

def elements(x):
    result = [[x]]
    for element in result:
        for j, number in enumerate(element):
            if number > 1:
                for i in range(1, int(number / 2) + 1):
                    copy = element[:]
                    del copy[j]
                    new_elem = sorted(copy + [i] + [number - i])
                    if new_elem not in result:
                        result.append(new_elem)
                        s = ''
                        for char in new_elem:
                            s += str(char)
                        print('+'.join(s))
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 05:01
999999 руб./за проект
19 апр. 2024, в 03:52
1000 руб./за проект
19 апр. 2024, в 03:01
1000 руб./за проект