Массив не заполняется до конца через цикл

Есть массив func, в него передаем 1 либо 0, там где равно 1 в новом массиве miniterms4 мы записываем соответственное значение:

n = int(input("Колво переменных: "))
miniterms4 = set([])
func = [0] * pow(2, n)
for i in range(len(func)):
    print("Вектор функции " + str(i+1) + ": ", end = "")
    func[i] = int(input())
    if func[i] > 1 or func[i] < 0:
        raise Exception("Значения только 0 и 1")

for i in func:
    if func[i] == 1:
        if i == 0:
            miniterms4.add("0000")
        elif i == 1:
            miniterms4.add("0001")
        elif i == 2:
            miniterms4.add("0010")
        elif i == 3:
            miniterms4.add("0011")
        elif i == 4:
            miniterms4.add("0100")
        elif i == 5:
            miniterms4.add("0101")
        elif i == 6:
            miniterms4.add("0110")
        elif i == 7:
            miniterms4.add("0111")
        elif i == 8:
            miniterms4.add("1000")
        elif i == 9:
            miniterms4.add("1001")
        elif i == 10:
            miniterms4.add("1010")
        elif i == 11:
            miniterms4.add("1011")
        elif i == 12:
            miniterms4.add("1100")
        elif i == 13:
            miniterms4.add("1101")
        elif i == 14:
            miniterms4.add("1110")
        elif i == 15:
            miniterms4.add("1111")
    else:
        continue

print(miniterms4)

Вывод:

Колво переменных: 4
Вектор функции 1: 1
Вектор функции 2: 0
Вектор функции 3: 1
Вектор функции 4: 1
Вектор функции 5: 0
Вектор функции 6: 1
Вектор функции 7: 1
Вектор функции 8: 1
Вектор функции 9: 1
Вектор функции 10: 0
Вектор функции 11: 0
Вектор функции 12: 0
Вектор функции 13: 0
Вектор функции 14: 1
Вектор функции 15: 1
Вектор функции 16: 1

miniterms4: {'0000'}

Ответы (1 шт):

Автор решения: Stanislav Volodarskiy

У вас цикл перебирает значения в списке func, а не индексы, как вы подразумеваете. Замените заголовок цикла, чтобы заработало:

< for i in func:

> for i in range(len(func)):

Если привести вашу программу к более питоническому виду то будет что-то такое:

def read_bit(prompt):
    v = int(input(prompt))
    if v not in (0, 1):
        raise Exception("Значения только 0 и 1")
    return v


n = int(input("Колво переменных: "))
func = [read_bit(f'Вектор функции {i}: ') for i in range(1, 2 ** n + 1)]
fs = f'{{:0{n}b}}'
miniterms = set(fs.format(i) for i, v in enumerate(func) if v == 1)
print(miniterms)
→ Ссылка