Python创建一个返回n,number,8位二进制字符串的文件

时间:2016-10-26 02:39:49

标签: python file binary

目前这是我的python代码的样子。我正在尝试编写一个文件,它将返回数字,n,8位二进制字符串,但我被卡住了,因为文件返回正确数量的二进制字符串,但它们在字符串中不是随机的。即。 00000000或11111111。

import random

def eightBitStrings(n):

    eightBits = "eightBits.txt"
    outputFile = open(eightBits,"w")


    for element in range(n):

        randomNum = int(random.random()*2)

        randomNum = str(randomNum) * 8

        outputFile.write(str(randomNum)+"\n")        


    outputFile.close()

感谢您的任何建议!

2 个答案:

答案 0 :(得分:1)

这应该有效:

import random

with open('eightBits.txt', 'w') as output_file:    
    for _ in range(n):
        random_num = random.randrange(255)
        output_file.write('{:08b}\n'.format(random_num))

您可以在[0,255]范围内生成一个数字,而不是逐位创建字符串,而是将其转换为二进制数。

答案 1 :(得分:1)

问题是当你转向int时。

random()返回0到1之间的值。将这些值乘以2,然后将范围扩展为[0,2)。

但是,当您将这些浮点数转换为整数时,会丢失小数,因此现在只能生成0和1。

然后当你执行str(randomNum)*8时,你只是创建一个包含8个randomNum的字符串,它是0或1。

如果你想保留当前的代码,你只需要一个额外的循环来生成0到1之间的8个随机数。这就是为什么你最终得到8 0或8 1的字符串

import random

def eightBitStrings(n):
    eightBits = "eightBits.txt"
    outputFile = open(eightBits,"w")

    for element in range(n):
        # create our string and we will randomly select 0 or 1 eight times
        s = ""
        for _ in range(8):
            # randomly generate 0 or 1 and append to our string
            randomNum = int(random.random()*2)
            s = s + str(randomNum)

        # output to file
        outputFile.write(s+"\n")        

    outputFile.close()

另一种方法是使用列表推导和random.randint()(在给定范围内生成整数):

import random

def eightBitStrings(n):
    eightBits = "eightBits.txt"
    outputFile = open(eightBits,"w")

    for element in range(n):
       #join together 8 randomly selected integers between [0,1]
       randomNumber = "".join([str(random.randint(0,1)) for _ in range(8)])
       outputFile.write(randomNumber+"\n")
    outputFile.close()