Массив не заполняется до конца через цикл
Есть массив 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)