2

我在以下几行中遇到错误。错误不会重复出现,但只是有时

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'
4

4 回答 4

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...在错误消息中显示问题(即前缀)。

解决方案是使用...剥离前缀

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

...或者,正如 Martijn Pieters 所建议的那样,使用format()...生成不带前缀的二进制表示

z = format(x, 'b') + format(y, 'b')
z = int(z, 2)

...或者,正如 gnibbler 建议的那样,使用字符串对象的format()方法在一次调用中完成...

z = '{:b}{:b}'.format(x, y)
z = int(z, 2)
于 2013-05-15T11:36:33.187 回答
1

bin给你一个字符串表示,所以bin( .. ) + bin( .. )连接两个字符串,这不是一个有效的结果。

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

如果您尝试使用实际的二进制数据(不是二进制数据的整数表示的字符串表示,这是您的代码所做的),那么您应该使用该struct模块

于 2013-05-15T11:33:29.763 回答
0

bin将返回以下格式的字符串:

'0b1100000011001011101000111010110011'

与第一'0b'

因此,对于您的代码,您可以使用它(将求和xy作为整数):

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

或者,如果您想首先将xand连接y为字符串:

z=bin(x)[2:]+bin(y)[2:]
z=int(z,2)
于 2013-05-15T11:36:03.667 回答
0

实际上,inbuild sqrt 函数不适用于我的 python 2.7.2 Ubuntu 12.04。所以我使用用户定义的函数来计算平方根。感谢大家的帮助。

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
于 2013-05-15T14:12:26.347 回答