2

私は現在、Learn Python the Hard Way を使用して Python を学んでおり、本当に楽しんでいます。レッスン例の 1 つに、私が把握できていない「戻る」の使い方があります。

私が行き詰まっているレッスンは、演習 43: 惑星パーカルからのゴートン #25です。next_room_nameゲームが最初に実行されたときに に設定されcentral_corridorているためcentral_corridor()、 の下の最初のループ中に呼び出されることを理解していますplay()。私が理解していないのは、 self.startget が再割り当てされる方法です。

たとえば、 でdeath返される場合central_corridor()。49 行目に戻ると、play(self): while Trueループに戻ります。最初の行はnext_room_name = self.start、私が知る限り、self.startまだ等号ですcentral_corridorが、どうやら今は等号になっているようdeathです。

これは、 afterdeathが返され、まだ のwhile下のループでplay()、オブジェクトGame()が再初期化され__init__、返された結果が供給されていることを意味しますか? 技術的にまだループにあり、ループから抜けていないときに、next_room_name = self.startアンダー__init__がどのように再割り当てされているのか混乱しています。どこに返されているのか混乱していると思います。deathplay(self): while Truedeath

4

2 に答える 2

3

whileそれでは、ループまでのいくつかのステップを見ていきましょう。

a_game = Game("central_corridor")
a_game.play()

ここではa_gamestart_value=を使用してインスタンス化しますcentral_corridor。これまでのところ、とても良いです:)今私たちは実行しますa_game.play()

def play(self):
    next_room_name = self.start

    while True:
        print "\n--------"
        room = getattr(self, next_room_name)
        next_room_name = room()

正しく述べたようにnext_room_name、値が割り当てられcentral_corridorwhileループが始まります。

これは取得するための重要な部分である可能性があります-whileループはwhileピースを実行するだけで、その下にインデントされたすべてのものnext_room_nameは毎回再割り当てされません。代わりに、属性(である)としてself.start定義してから、同じ名前のメソッドを実行します。そのメソッドの戻り値(たとえば)は、次のループで使用されます。つまり、の結果は、ランダムなquipを出力して終了します。名前が別の部屋の場合、ループが続行されます。roomnext_room_namecentral_corridordeathroom = deathnext_room_name=death()

于 2012-11-07T02:03:12.823 に答える
3

self.start再割り当てされることはありません。49 行目の return は、play()メソッドの先頭に戻るのではなく、

next_room_name = room()

next_room_name = self.startはまったくwhileループしていないため、最初の時間以降は発生しません。それがメソッドが返したものであるため、next_room_nameに設定されているだけです。deathcentral_corridor

于 2012-11-07T01:56:37.887 に答える