2016-10-27 55 views
0

因此,該函數所要做的就是要求輸入文件名,k位二進制字符串以及n次寫入k位二進制字符串的次數。如何製作一個長度爲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等

我想也許將所有的數字拆分爲它們表示的二進制形式,例如8位的0-255,例如,如果k = 8,我只是格式化它,但那樣會這意味着我將不得不這樣做很多次。

現在我所得到的是

1010001100000111111001100010000001000000011010111 

或其他一些很長的二進制字符串。

回答

1

的問題是,在width格式字符串是minimum width of the field

寬度是十進制整數定義最小字段寬度。如果未指定,則字段寬度將由內容決定。

你可以只限制你隨機化來解決問題數:

randomNumber = random.randint(0, 2 ** k - 1) 
+0

哇,謝謝,我想我會要做大量的嵌套循環或if語句。這對我有效。 – thatoneguy

0

使用random.getrandbits()format string

>>> import random 
>>> random.getrandbits(8) 
41 
>>> 
>>> s = '{{:0{}b}}' 
>>> k = 24 
>>> s = s.format(k) 
>>> s.format(random.getrandbits(k)) 
'101111111001101111100100' 
>>> 
+0

如果第一位爲0,則需要在格式字符串中指定前綴和寬度。儘管您隨機化了24位,但您提供的第二個示例僅包含20個字符。 – niemmi

+0

謝謝@niemmi ... – wwii

相關問題