Вы можете перебирать биты и с каждым шагом генерировать случайные значения от 0 до 1. Если ваше случайное значение меньше q, вы добавляете правильный бит в свой новый список bits_con_error. Если ваше случайное значение больше, чем q, то вы добавляете случайно сгенерированные 1 или 0, используя randint (0, 1)
Per = float(input("Introduzca probabilidad de error: "))
while Per > 1 or Per < 0:
print("P.error ha de tener un valor comprendido entre 0 y 1/2")
Per = float(input("Introduzca probabilidad de error: "))
q = 1 - Per
import random
entrada = int(input("Introduzca manualmente secuencia de bits: "),2)
bits = [int(x) for x in bin(entrada)[2:]]
bits_con_error = []
for bit in bits:
if random.random() < q:
bits_con_error.append(bit)
else:
bits_con_error.append(random.randint(0, 1))
print(bits_con_error)
или если ошибка в канале должна перевернуть бит, а не случайно генерируя новый бит, вы можете использовать bits_con_error.append(int(not bit))