2017-02-25 9 views
0

チェッカーを試してみたこのオープンソースコードがあります。コードはピース部分を取るまでうまく動作します。エラーが表示されます:TypeError:<<:intおよびfloatのサポートされていないオペランドタイプ

line 73, in make_move 
    taken_piece = int(1 << sum(i for (i, b) in enumerate(bin(move)[::-1]) if b == '1')/2) 
TypeError: unsupported operand type(s) for <<: 'int' and 'float' 

この問題の解決方法に関するヘルプはありますか?

+0

あなたのコードを正しくフォーマットしてください。 – dannyxn

+2

python 3: '// 2'を使うか、浮動小数点数を取得します。 –

+1

明らかに、このソフトウェアはPython 2用に書かれていましたが、Python 3で実行しようとしています。他の問題にぶつかるまではたぶん時間がかかります。 – phant0m

答えて

3

ビットを浮動小数点でシフトすることはできませんが、エラーはかなり明確です。 sum(...)/2は、現在の操作でfloatを返します。

しかし、できることは、//をPython 3で使用して整数除算を実行することです。Python 2の場合、/は、デフォルトの動作をオーバーライドしたこと以外は整数除算を行います(intオペランドの場合)。

+0

Python 2では、両方のオペランドがintなので、すでにintです。 Pythonで '2.5/2'を実行すると、'/'は整数除算を行いません。 – phant0m

+0

私はすでに回答に答えました –

+0

あなたは '/'のように聞こえるようにすると常に整数除算を行います。 (これをオーバーライドできるかどうかは無視してみましょう)。私の指摘は、演算は引数に依存するということです。なぜなら、両方がintであるから、整数除算を行います。なぜなら、 '/'が使われるからです。 – phant0m

関連する問題