目前这是我的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()
感谢您的任何建议!
答案 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()