2013-05-15 2 views
2

다음 행에 오류가 발생합니다. 오류가 반복되지 만, 때로는python-ValueError : 밑이 2 인 int()에 대한 리터럴이 잘못되었습니다.

x,y are huge numbers of 2048 bits 
z=bin(x)+bin(y) 
z=int(z,2) 

ValueError: invalid literal for int() with base 2: '10010101101001011011000000001111001110111110000100101000000011111111100000111010111011101111110010001101101001101000100000001100010011000010100000110100100001010110011111101101000101101001011001100110' 
+0

Jochen이 답변에서 지적한 것처럼 문자열에 두 개의' "b"'문자가 포함되어 있기 때문에 'ValueError'가 게시 한 코드에서 오지 않은 것으로 의심됩니다. –

+0

정말 그 _exact_ 오류 메시지를 받았습니까? 어떤 버전의 파이썬인가? 어느 OS? –

답변

0

bin 그래서 당신에게 bin(..) + bin(..) concats 유효한 결과가 아닌 두 개의 문자열을 문자열 표현을 제공합니다. 경우

>>> bin(0) + bin(1) 
'0b00b1' 

당신은 당신이 대신 struct module를 사용해야 실제 이진 데이터 (코드가 무엇 인 이진 데이터의 정수 표현하지 문자열 표현)와 함께 작동하도록 노력하고 있습니다.

0

bin는 형식 문자열을 반환합니다

'0b1100000011001011101000111010110011' 

'0b'

으로 그래서, 코드, 당신은 (정수로 xy 합계 것)이 사용할 수 있습니다 :

z=int(bin(x)[2:], 2) + int(bin(y)[2:], 2) 

또는 정확히 xy을 스트 린으로 연결하려는 경우 ngs :

z=bin(x)[2:]+bin(y)[2:] 
z=int(z,2) 
+0

z = int (z, 2)가 위에서 언급 한 오류를 발생시킵니다. – pratibha

+0

이 줄'z = bin (x) [2 :] + bin (y) [2 :]'다음에'z'는 "0"과 "1"만을 포함하는 문자열입니다. 정말로'z = int (z, 2)'보다 먼저이 행'z = bin (x) [2 :] + bin (y) [2 :]'를 실행 했습니까? – stalk

+0

네,하지만 오류가 발생하는 경우가 있습니다. 나머지는 정상적으로 작동합니다 ... 그래서 10 개 중 8 개가 정상적으로 작동합니다. – pratibha

4

오류 메시지를 위조하지 않았습니까?

코드 ...

>>> int('10010101101001011011000000001111001110111110000100101000000011111111100000111010111011101111110010001101101001101000100000001100010011000010100000110100100001010110011111101101000101101001011001100110', 2) 
939350809951131205472627037306557272273273866819979105965670L 

은 ... 나를 위해 작동합니다.

그리고, 코드의 구체적인 예 ...

>>> x = 82349832 
>>> y = 23432984 
>>> z = bin(x) + bin(y) 
>>> int(z, 2) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: invalid literal for int() with base 2: '0b1001110100010001111000010000b1011001011000111100011000' 

는 ... 오류 메시지의 문제 (즉 0b 접두사)를 보여줍니다. ... 마티 피터스 있듯이, format() 프리픽스를 사용하지 않고 진 표현을 생성

용액하는 것 중

z = bin(x)[2:] + bin(y)[2:] 
z = int(z, 2) 

...와 프리픽스 스트립 ... 또는

z = format(x, 'b') + format(y, 'b') 
z = int(z, 2) 
gnibbler에서 알 수 있듯이, 하나의 호출을 수행 할 문자열 객체의 format() 방법을 사용

... 나 ...

z = '{:b}{:b}'.format(x, y) 
z = int(z, 2) 
,
+3

또는'format (x, 'b')'를 사용하고 '0b'접두어없이 2 진 표현 *을 얻습니다. –

+2

또는''{: b} {: b} '를 사용하십시오. format (x, y)' –

+0

이것은 x와 y를 더하지 않고 이진수를 연결합니다. – 0TTT0

0

실제로 파이썬 2.7.2 Ubuntu 12.04에서는 inbuild sqrt 함수가 작동하지 않았습니다. 그래서 제곱근에 사용자 정의 함수를 사용했습니다. 도와 주신 모든 분들께 감사드립니다.

def ceilofsqrt(N): 
    answerlower = 1 
    answerupper = N 
    while answerupper - answerlower > 2: 
     answerupper = (answerupper + answerlower)/2 + (answerupper + answerlower)%2 
     answerlower = N/answerupper 
    guess = answerlower 
    while True:  
     if guess**2 >= N: 
      return guess 
     guess += 1 
관련 문제