Python创建一个返回n个8位二进制字符串的文件
目前,这就是我的python代码的样子。我正在尝试编写一个文件,该文件将返回数字,n,8位二进制字符串,但我被卡住了,因为该文件返回的二进制字符串的数量正确,但它们在字符串中不是随机的。即00000000或11111111Python创建一个返回n个8位二进制字符串的文件,python,file,binary,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)
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()
任何建议都将不胜感激,谢谢 这应该有效:
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))
您可以生成[0255]范围内的数字,并将其转换为二进制,而不是逐位创建字符串。问题在于转换为
int
时
random()
返回一个介于0和1之间的值。将这些值乘以2,就可以将范围扩大到[0,2]
但是,当您将这些浮点数转换为整数时,您将丢失小数,因此现在您只能生成0和1
然后,当您执行str(randomNum)*8
时,您只需生成一个字符串,其中包含8个randomNum
是什么,即0或1
如果您想保留当前代码,只需要额外的循环来生成8个介于0和1之间的随机数。这就是为什么最终得到的字符串不是80就是81
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()
(生成给定范围内的整数):
行
randomNum=str(randomNum)*8
仅重复同一字符八次。
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()