2016-10-26 7 views
2

現在のところ、これは私のpythonコードのようです。私は、数値、n、8ビットのバイナリ文字列を返すファイルを書き込もうとしていますが、ファイルが正しい数のバイナリ文字列を返すのでスタックされていますが、文字列内ではランダムではありません。すなわち、 00000000または11111111。Python 8ビットバイナリ文字列の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() 

ありがとうございます。

+1

'randomNum = str(randomNum)* 8 'という行は、単に同じ文字を8回繰り返すだけです。 –

答えて

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

intにキャストするときに問題が発生します。

random()は、0と1の間の値を返します。これらの値に2を掛けて、範囲を[0,2]に拡張しました。

しかし、これらの浮動小数点数をintに変換すると、小数点が失われるため、0と1だけを生成することができます。

あなたがstr(randomNum)*8を行うときに、あなただけのどんなrandomNumの8を含む文字列を作っていることは0または1

、あなたの現在のコードを維持したい場合、あなたは、単に余分なループを必要とする、ありますあなたはどちらかが8 0または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() 

8もう一つの方法は、所定の範囲内の整数を生成し、リスト内包表記とrandom.randint()を(使用することですされている文字列で終わる理由です0と1の間の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() 
関連する問題