2016-04-18 6 views
-1

ランダムプロジェクトでは、文字列の "暗号化"と "復号化"ルーチンをランダムに生成するPythonプログラムを作成しています。その結果ルーチンは罰金(routine_len)作品約50っぽいの反復までeval()反復回数を増やすと、多型 "暗号化"の結果が若干異なります

def buildRoutines(routine_len): 
    instructions = ['+', '-', '^'] 
    pairs = {'+': '-', '-': '+', '^': '^'} 
    encrypt = "" 
    decrypt = "" 
    random.seed() 
    for _ in range(0, routine_len): 
     i = random.randrange(3) 
     j = random.randrange(100) 
     encrypt += 'e=' + 'chr((' + 'ord(e)' + instructions[i] + str(j) + ')%255)' + ';' 
     decrypt = 'e=' + 'chr((' + 'ord(e)' + pairs[instructions[i]] + str(j) + ')%255)' + ';' + decrypt 
    # Do some more stuff 
    encrypt = 'a="";e=""\nfor b in c:e=b;' + encrypt + 'a+=e;' 
    decrypt = 'd="";e=""\nfor b in a:e=b;' + decrypt + 'd+=e;' 
    return {'encrypt': encrypt, 'decrypt': decrypt} 

で使用することを意味しているが、私はその上に行くとき、結果は元の文字列から少し離れています。反復回数が多いほど、それは異なる。 150回の反復では、1〜2文字だけが間違っています。

私はこれを理解しようとしてきましたが、修正できないようです。それはおそらく私が行方不明になっている本当に愚かなものです。

EDIT:modに使用していた値が間違っていました。返事をくれた皆さん、ありがとうございました。

+1

もし 'iterations'の数にかかわらず間違っていれば、それは間違いです。 –

+0

@MitchWheat私はそれを仮定しますが、100-ishと反復では、文字列は元の文字列とまったく同じに見えます。どのようにそれが間違っていることができますか?結果の等価性を元の文字列でチェックすると(==付き)、同じときはTrueを、そうでないときはfalseを返します。したがって、ルーチンはより長い時間で動作しないことがあります。 – Fluffy

+2

あなたは '%256'を望んではいませんか?高い反復で問題に遭遇する理由は、その辺の大文字小文字が見つからないということですか? '%255 'はあなたの最大値が254であることを意味します。 –

答えて

1

%255の場合、最大値は255ではなく、254です。代わりに%256を使用してください。

+0

それはそれでした!ありがとう、 – Fluffy

関連する問題