如何以给定的错误概率打印列表的二进制数(Python)

如何以给定的错误概率打印列表的二进制数(Python),python,list,printing,binary,probability,Python,List,Printing,Binary,Probability,如果我有一个二进制数列表(0和1)。我需要用概率p打印这些数字(p=1-信道中的错误概率) 如果误差概率=0.2(p=0.8),余数为101010101010,则解决方案类似于101011101000 Per=float(输入(“导入概率数据错误:”) 当Per>1或Per1或Per

如果我有一个二进制数列表(0和1)。我需要用概率p打印这些数字(p=1-信道中的错误概率)

如果误差概率=0.2(p=0.8),余数为101010101010,则解决方案类似于101011101000


Per=float(输入(“导入概率数据错误:”)
当Per>1或Per<0时:
打印(“P.error ha de tener un valor compendido entre 0 y 1/2”)
Per=浮点(输入(“导入概率数据错误:”)
q=1-每
随机输入
entrada=int(输入(“介绍手册”第2节)
位=[int(x)表示容器中的x(entrada)[2:]

您可以遍历这些位,并在每一步生成一个介于0和1之间的随机值。如果随机值小于q,则将正确的位添加到新列表位\u con\u error。如果您的随机值高于q,则使用randint(0,1)添加随机生成的1或0

Per=float(输入(“导入概率数据错误:”)
当Per>1或Per<0时:
打印(“P.error ha de tener un valor compendido entre 0 y 1/2”)
Per=浮点(输入(“导入概率数据错误:”)
q=1-每
随机输入
entrada=int(输入(“介绍手册”第2节)
位=[int(x)表示容器中的x(entrada)[2:]
位错误=[]
对于以位为单位的位:
如果是random.random()
或者,如果通道中的错误应该翻转位,而不是随机生成新位,则可以使用
位\u con\u error.append(int(not bit))
尝试以下操作:

import random
tot = len(entrada)
approx= round(Per*tot)

temp = list(entrada)
entrada = list(entrada)
for i in random.sample(range(0,tot),approx):
  if entrada[i]=='1':
    entrada[i]='0'
  else:
    entrada[i]='1'

count = 0
for i in range(len(entrada)):
  if(temp[i]!=entrada[i]):
    count+=1

entrada =''.join(entrada)
print('modified entrada is : ',entrada)
print('error after modification is : ',round(count/len(entrada),3),' approximately..')
输出:

modified entrada is :  000111001011
error after modification is :  0.167  approximately..

完成!我没有错误日志。。。我不知道如何使代码的其余部分…有多少小数点的错误概率将是?尽可能多的用户想要。。。他是谁写的输入…在你的例子中,错误概率是不准确的权利,它是大约0.17。所以,如果有这样的近似,对你来说不是问题,对吧?谢谢!!!!!这正是我想要的!!有效:D
import random
tot = len(entrada)
approx= round(Per*tot)

temp = list(entrada)
entrada = list(entrada)
for i in random.sample(range(0,tot),approx):
  if entrada[i]=='1':
    entrada[i]='0'
  else:
    entrada[i]='1'

count = 0
for i in range(len(entrada)):
  if(temp[i]!=entrada[i]):
    count+=1

entrada =''.join(entrada)
print('modified entrada is : ',entrada)
print('error after modification is : ',round(count/len(entrada),3),' approximately..')
modified entrada is :  000111001011
error after modification is :  0.167  approximately..