2017-04-19 74 views
-1

我有以下功能解決類型錯誤在Python/IPython的

def get_lexographically_next_bit_sequence(self, bits): 
    """ 
    Bit hack from here: 
    http://www-graphics.stanford.edu/~seander/bithacks.html#NextBitPermutation 

    Generator even does this in poker order rank 
    so no need to sort when done! Perfect. 
    """ 
    t = (bits | (bits - 1)) + 1 
    next = t | ((((t & -t) // (bits & -bits)) >> 1) - 1) 
    yield next 
    while True: 
     t = (next | (next - 1)) + 1 
     next = t | ((((t & -t) // (next & -next)) >> 1) - 1) 
     yield next 

該函數返回的錯誤麻煩:

TypeError: unsupported operand type(s) for >>: 'float' and 'int'

注: 這個Python庫僅在2.7和我支持使用2to3才能使用它。圖書館的其他部分按照需要工作,所以我一般有信心2to3工作。

我想在IPython 3.5中運行這個,我聽說這樣的一些錯誤可能發生在IPython中,所以我想知道它是否與此有關。

+0

我用10101測試了代碼,它工作正常。問題的輸入是什麼? –

+0

@MHornbacher位= 31 –

+0

我的結果:Windows 10 1607 python 2.7.3和Python 3.6.0你的代碼在3秒內沒有返回錯誤 –

回答

0

此問題源於您嘗試在兩種不同數據類型(floatint)之間執行Binary Right Shift (>>)的事實。將float浮動到(int(((t & -t) // (next & -next)) >> 1) - 1)應該盡我所能。

+0

對於任何'>>'的輸入都不應該* * *儘管如此,還是漂浮着。你不能從'&'中獲得一個浮點數,並且'//'不會給浮點數,除非你給它浮點數。 – user2357112

+0

我認爲他給了它漂浮。一個測試用例,有31個通過,與原代碼 –

+0

一起工作[如果你給這個函數一個浮點數,它會在'|',而不是'>>'中出錯。](http://ideone.com/8mId00)這個函數可以讓float到達任何'>>'運算符。 – user2357112

相關問題