機能ローカル変数のインラインcs61aの研究ノート

今日でも、自分の豚のプロジェクトを実施しています。
プロジェクト出力要件は、最大増分の選手です。
私は、次のコードを書かれています:

def announce_highest(who, prev_high=0, prev_score=0):
    assert who == 0 or who == 1, 'The who argument should indicate a player.'
    def say0(score0, score1):
  

  nonlocal prev_high
    nonlocal prev_score
        cur_gain = score0 - prev_score #求出当前分和前一轮分的增量
        if cur_gain > prev_high:
            print(str(cur_gain)+" point(s)! That's the biggest gain yet for Player 0")
            prev_high = cur_gain
        prev_score = score0
        return announce_highest(who, prev_high, prev_score)
    return say0

結果は、試験に合格しなかった:
ここに画像を挿入説明
このテスト入力、すなわち各第2の値の転送は、誰= 1であり、
最終テストf2_again = F1(11、9)を見ることができる
コードのこの行の目的は、変化の割合です、機能はまだ動作し、出力が9でなければなりません。しかし、私のコードは出力を持っていません。

ビットを実行するために、独自のポートに
ここに画像を挿入説明
出力5,7,6、6ことが、出力はありません
ここに画像を挿入説明
、F1、F0の出力に変更し、最後の行が6を発見した
ことを学ぶことができ、内部フレームずれの関数です。

ここに画像を挿入説明pythontutor実行し、見つかった、と(即ち、前符号f1に)フレームのH1実行値変更prev_high prev_scoreオン。
希望は、2つのローカル変数を変更せずに、読み取り専用の機能を言っているのでここではと期待が、一致していません。
次の呼び出し、cur_gainは-1、出力できませんでしたときには、最後の呼び出しのH1なぜなら、およびprev_high = 5 prev_score = 12ようです。

私は機能を実現します

  nonlocal prev_high
  nonlocal prev_score

announce_highest内結合これら二つの変数と変数は、自然に身体を起動するために導きました。
私の友人の最後の一つは、内部リードのみ、それによって問題を解決する、ない変更を行うと言うように、二つの新しい量new_scoreを設定するために私に言った、new_high。
再びF1 prev_highとprev_scoreまだ5,5を実行している内部には、更新を達成することができる挿入します。


def announce_highest(who, prev_high=0, prev_score=0):
    assert who == 0 or who == 1, 'The who argument should indicate a player.'
    def say0(score0, score1):
        cur_gain = score0 - prev_score
        if cur_gain > prev_high:
            print(str(cur_gain)+" point(s)! That's the biggest gain yet for Player 0")
            new_high = cur_gain
        new_score = score0
        return announce_highest(who, new_high, new_score)
    return say0
f0 = announce_highest(0)
f1 = f0(5,0)
f2 = f1(12,5)
f2_again = f1(11,9)

ここに画像を挿入説明

リリース元の2件の記事 ウォンの賞賛1 ビュー73

おすすめ

転載: blog.csdn.net/weixin_44297861/article/details/104467810