0

これはどのように実行されますか?

def f(x):
    return x>0 and (x%2)+f(x/2) or 0

xたとえば、配列です。[1, 1, 1, 3]

4

4 に答える 4

2

このコードは壊れています。まず、x>0常に true です。しかしx%2x/2型エラーが発生します。

于 2010-05-19T11:53:51.577 に答える
0

これのことですか?

$ python
Python 2.5.5 (r255:77872, Apr 21 2010, 08:40:04) 
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> def f(x):
...     return x>0 and (x%2)+f(x/2) or 0
... 
>>> f([1, 1, 1, 3])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in f
TypeError: unsupported operand type(s) for %: 'list' and 'int'
于 2010-05-19T11:53:05.330 に答える
0

returnステートメントでの評価は、他の場所での評価と何ら変わりはありません。ifxがリストの場合、この全体が意味をなさず、 が発生しTypeErrorます。xこれが機能するには、数値でなければなりません。

が数値の場合x、次のように機能します。

  • x>0ステートメントを評価する
  • Trueリターン(x%2)+f(x/2)パーツの場合。もちろん、これは無限に再帰します
  • Falseリターンだったら0
于 2010-05-19T11:53:41.447 に答える
0

この関数は、数値 x のバイナリ形式で 1 ​​の数を再帰的にカウントします。

関数が追加するたびに、最下位ビット (1 または 0) と、最後のビットのない数のビット カウント (2 で割ることは、1 だけ右にシフトするようなもの) を合計するか、それ以上ビットがない場合は 0 と合計します。

例: 関数は入力として 5 に対して 2 を返します (5 は 2 進数で 101 です) 関数は入力として 13 に対して 3 を返します (13 は 2 進数で 1101 です) ...

于 2010-05-19T12:07:33.987 に答える