所以函数的作用是要求输入文件名,k位二进制字符串,并且n次写入k位二进制字符串。
def makeStrings():
fileName = str(input("File Name: "))
k = input("Bits Input: ")
n = int(input("Number of Strings: "))
outputFile = open(fileName, "w")
counter = 0
while (counter < n):
randomNumber = random.randint(0, 9223372036854775808) #that big number is the max representation of a 64bit binary string
binary = ('{:0' + str(k) + 'b}').format(randomNumber)
outputFile.write(str(binary) + "\n")
counter = counter + 1
outputFile.close()
所以我的问题是该功能有效。除了没有将二进制格式化为k位长之外,它确实做了它想做的事情。所以说例如我可以从随机数中得到任何二进制表示,但我只希望它们是k位长。所以,如果我使k = 8,它应该给我8位长的随机8位二进制字符串,或者如果我使k = 15,它应该给我随机的15位二进制字符串。
所以说我的输入是
>>> FileName: binarystext.txt #Name of the file
>>> 16 #number of bits for binary string
>>> 2 #number of times the k-bit binary string is written to the file
它应该写入以下文件
1111110110101010
0001000101110100
相同的表示将应用于任何位二进制字符串。 2,3,8,32等。
我想到可能将所有数字拆分为它们所代表的二进制形式,例如0-255代表8位,如果k = 8,我只会格式化它,但这意味着我必须做大量的次。
现在我得到的是
1010001100000111111001100010000001000000011010111
或其他一些非常长的二进制字符串。
答案 0 :(得分:1)
问题是格式字符串中的width
是minimum width of the field:
width是定义最小字段宽度的十进制整数。如果未指定,则字段宽度将由内容确定。
您可以限制随机修复此问题的数量:
randomNumber = random.randint(0, 2 ** k - 1)
答案 1 :(得分:0)
使用random.getrandbits()和format string:
[:digit:]