解説
送ったパケットは、それぞれ違う経路を通ることがあるため、受け取る順番が送った順番と一致するとは限りません。だからこそ各パケットには通し番号が付いています。
受信側は、届いたパケットを番号順に並べ直す(ソートする)ことで、元のメッセージを正しく復元できます。ここでは random でわざと順番を入れ替え、その後 sorted で番号順に戻します。
番号が「再構成のカギ」であることが分かります。
書き方
・import random / random.seed(7): 乱数を初期化し再現性を確保。random.shuffle(リスト): 要素をその場でシャッフル。
・[{...} for i, d in enumerate(リスト)]: enumerate で添字 i と値 d を同時に取り、辞書のリストを内包表記で作る。
・リスト[:]: リストの浅いコピーを作る。
・sorted(リスト, key=lambda p: p["no"]): no をキーに番号順へ並べ替える。
・"".join(...): 文字列を連結して結合する。書いて動かす
この回の課題
わざと順番を入れ替えたパケットを通し番号で並べ直し、元のメッセージを復元してみよう。
コードはあなたの端末の中だけで動きます(サーバーには送られません)。進み具合もこのブラウザに保存されます。
自分のPCでも続けてみませんか
Windows版 InsightPy は Python を同梱しているので、環境構築なしで同じコードを書いて実行できます。 書いたコードを保存しておけるほか、ステップ実行で変数の変化を1行ずつ確かめられます。 個人の学習や私的な目的でのご利用は、31日目以降も無料です(スクリプトの保存は10本まで)。 このブラウザ版の学習センターも、引き続き無料でお使いいただけます。