A. B. Dinshaa Ответов: 2

Может ли кто-нибудь сказать мне, пожалуйста, где ошибка в следующих двух кодах?


Как отобразить powerset с помощью следующего кода? в чем же ошибка и где именно? почему выходные данные не отображаются? Что нужно сделать, чтобы отобразить выходные данные?

Что я уже пробовал:

def power_set(items):
    N = len(items)
    # enumerate the 2 ** N possible combinations
    for i in range(2 ** N):
        combo = []
        for j in range(N):
            # test bit jth of integer i
            if (i >> j) % 2 == 1:
                combo.append(items[j])
        yield combo

2 Ответов

Рейтинг:
2

OriginalGriff

Компиляция не означает, что ваш код верен! :смеяться:
Подумайте о процессе разработки как о написании электронного письма: успешная компиляция означает, что вы написали письмо на правильном языке - например, на английском, а не на немецком, - а не то, что письмо содержало сообщение, которое вы хотели отправить.

Итак, теперь вы входите во вторую стадию разработки (на самом деле это четвертая или пятая, но вы перейдете к более ранним стадиям позже): тестирование и отладка.

Начните с рассмотрения того, что он делает, и как это отличается от того, что вы хотели. Это важно, потому что это дает вам информацию о том, почему он это делает. Например, если программа предназначена для того, чтобы позволить пользователю ввести число, а он удваивает его и печатает ответ, то если ввод / вывод был таким:

Input   Expected output    Actual output
  1            2                 1
  2            4                 4
  3            6                 9
  4            8                16
Тогда совершенно очевидно, что проблема заключается в бите, который удваивает его - он не прибавляет себя к себе или умножает его на 2, он умножает его на себя и возвращает квадрат входного сигнала.
Таким образом, вы можете посмотреть на код, и очевидно, что он находится где-то здесь:
int Double(int value)
   {
   return value * value;
   }

Как только у вас появится идея, что может пойти не так, начните использовать отладчик, чтобы выяснить, почему.
python debugger - поиск в Google[^]
Поместите точку останова в первую строку метода и запустите приложение. Когда он достигнет точки останова, отладчик остановится и передаст управление вам. Теперь вы можете запускать свой код построчно (так называемый "одноступенчатый") и просматривать (или даже изменять) содержимое переменных по мере необходимости (черт возьми, вы даже можете изменить код и повторить попытку, если вам это нужно).
Подумайте о том, что должна делать каждая строка кода перед ее выполнением, и сравните это с тем, что она действительно делала, когда вы использовали кнопку "шаг вперед" для выполнения каждой строки по очереди. Он сделал то, что вы ожидали? Если да, то переходите к следующей строке.
Если нет, то почему? Чем это отличается?
Надеюсь, это поможет вам определить, в какой части этого кода есть проблема и в чем она заключается.
Это навык, и его стоит развивать, поскольку он помогает вам как в реальном мире, так и в развитии. И, как и все навыки, он только улучшается при использовании!


Рейтинг:
1

CPallini

Следующая программа

def power_set(items):
    N = len(items)
    # enumerate the 2 ** N possible combinations
    for i in range(2 ** N):
        combo = []
        for j in range(N):
            # test bit jth of integer i
            if (i >> j) % 2 == 1:
                combo.append(items[j])
        yield combo



for k in power_set([1,2,3]):
    print(k)
Производит
[]
[1]
[2]
[1, 2]
[3]
[1, 3]
[2, 3]
[1, 2, 3]


A. B. Dinshaa

Во-первых, ряд Фибоначчи-это 1,2,3, а не 5,8,2, второй дисплей для проверки не исправляется. Во-вторых, правильный набор мощности не генерируется. В последнем случае я хочу сгенерировать два ряда Фибоначчи n и m (они могут быть одинаковыми) и сгенерировать степенной набор из двух наборов рядов Фибоначчи n и m. Они могут быть такими же, как и делать с двумя разными наборами чисел, будет слишком утомительно.

где N = [0,1,2]
n[0] = 1
n[1] = 2
деф множество(элементы):
N = len(элементы)
# перечислите 2**N возможных комбинаций
для i в диапазоне(2**N):
комбо = []
для j в диапазоне(N):
# тестовый бит jth целого числа i
если (i >> j) % 2 == 1:
комбинированный.добавить(элементы[Дж])
еще:
комбинированный выход

nterms = 3
количество = 0
i = 0
если nterms <= 0:
print("пожалуйста, введите положительное целое число")
Элиф нтермс == 1:
печать("последовательность Фибоначчи до",nterms,":")
print(n[0])
еще:
печать("последовательность Фибоначчи до",nterms,"термины:")
в то время как граф < nterms:
print(n[i],end=' , ')
nth = n[i] + n[i+1]
# обновленное значение
n[i] = n[i+1]
n[i+1] = n-й
количество += 1

i=0
для i в диапазоне(len(n)):
печати("\п",н[я], сентября = ", ")
i+=1
#секунд(Н)


для k в powerSet(n):
печать(n)