2017-04-12 8 views
2

私は初心者ですので、これは明らかです。Python 3:ValueError:基数10のint()のリテラルが無効です: '0001.0110010110010102e + 22'

私はここに迷っています。暗号化/復号化プログラムを作成しようとしていましたが、このエラーが発生しています。私はこの問題について他の質問があることを知っていますが、それでも解決できません。

Encryptorは

import binascii 
def text_to_bits(text, encoding='utf-8', errors='surrogatepass'): 
    bits = bin(int(binascii.hexlify(text.encode(encoding, errors)), 16))[2:] 
    return bits.zfill(8 * ((len(bits) + 7) // 8)) 

def text_from_bits(bits, encoding='utf-8', errors='surrogatepass'): 
    n = int(bits, 2) 
    return int2bytes(n).decode(encoding, errors) 

def int2bytes(i): 
    hex_string = '%x' % i 
    n = len(hex_string) 
    return binascii.unhexlify(hex_string.zfill(n + (n & 1))) 

#ENCRYPTION ALGORITHM 
algorithm = 61913299 

#ASCII ----> NUMBERS 
raw = input("Enter text to encrypt:") 

binary = text_to_bits(raw) 
binary = int(binary) 
algorithm = int(algorithm) 
encrypted = binary * algorithm 
encrypted = str(encrypted) 
print(encrypted) 

print("Done") 

の復号化:バイナリとテキスト、テキストとバイナリの間の変換のために

import sys 
import time 

def to_bin(string): 
    res = '' 
    for char in string: 
     tmp = bin(ord(char))[2:] 
     tmp = '%08d' %int(tmp) 
     res += tmp 
    return res 

def to_str(string): 
    res = '' 
    for idx in range(len(string)/8): 
     tmp = chr(int(string[idx*8:(idx+1)*8], 2)) 
     res += tmp 
    return res 

incorrectpasswords = 0 
password=("password") 
originpassword = password 
x = 1 
algorithm = 61913299 

while x==1: 
    passwordattempt =input("Enter Password:") 
    if passwordattempt == password: 
     print("Correct") 
     x = 2 

    if passwordattempt!= password: 
     print("Incorrect") 
     incorrectpasswords = incorrectpasswords + 1 
    if incorrectpasswords > 2: 
     if x == 1: 
      print("Too many wrong attempts, please try again in one minute.") 
      time.sleep(60) 


encrypted = input("Enter numbers to unencrypt:") 

encrypted = int(encrypted) 

one = encrypted/algorithm 
size = sys.getsizeof(one) 
one = str(one).zfill(size + 1) 
one = int(one) 
unencrypted = to_str(one) 

x = unencrypted 

が、私は私がオンラインで見つけるいくつかのコードを使用していました。

+0

んが、それはどのラインがエラーであるかを言う? –

+0

@MatthewCiaramitaroはい、申し訳ありません。 '1 = int(one)' –

+1

Python 3の '/'または 'true division"演算子は、以前のPythonバージョンとは異なり、 'ints 'で呼び出されてもfloatを返します。アルゴリズムに適している場合は、代わりに '//'や 'floor division 'を使うことができ、入力が与えられていれば' int'を返します。 –

答えて

0

私はので、あなたのコードが動作していないと信じて:

one = encrypted/algorithm 

が戻ってあなたが

eval(one) 

または

float(one) 
を適用すべきである数にあなたの文字列をオンにするフロート

を生成し、

代わりの

int(one) 

(あなたはまた、フロートやevalを適用した後にint型に変換することができます) 代わりにあなたがoneタイプを行いますされ、/とは対照的に、整数除算//を使用してそれを得ることができるかもしれませんdivisonの小数結果をフローリングによるintが、私はそれはあなたのpython 3シェルで

例を探している行動であるかどうかわからないんだけど:

>>> import sys 
>>> one = 15/25 
>>> size = sys.getsizeof(one) 
>>> one = str(one).zfill(size+1) 
>>> one 
'00000000000000000000000.6' 
>>> type(one) 
<class 'str'> 
>>> one = eval(one) 
>>> one 
0.6 
>>> type(one) 
<class 'float'> 
+0

私はこれを行うとエラーが発生します:TypeError:eval()arg 1は文字列、バイトまたはコードオブジェクトでなければなりません –

+0

文字列に変換した後に、その操作を行いましたか?それ以前にやったことがありますか? –

+0

これは 'one = int(one)'の代わりに適用されるべきです –

関連する問題