Pythonサンプル問題 設問2

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】
YGさん  
(No.1)
[空欄c]

parse()では、命令列をタプルのリストに変換している。その際に

  ・ 内包表記

を使っているのがポイントである。この内包表記の意味は、

  ・ 文字列s を ; で分割して作成したリストの要素数(分割数がそのまま要素数になる)
    ?の分だけ、タプルの要素を作ってくれ

となる。上記の要素数は、そのまま命令列の命令数になる。

例えば文字列s がαの命令列の場合、s.split(';')の結果は

  ['R3','R4','F100','T90','E0','F100','E0']

となる。'R3'、'R4'、...と、分割後の文字列が順次処理されるという仕組み。

上記の各々の文字列が、各々のタプルに変換される。例えば、

  'R3' => ('R',3)
  'F100' => ('F',100)

といった感じ。空欄cはこのタプルの後者に入れるべきもので、そこには、

  ・ 数字列を数値に変換したもの

が入ることがわかる。数字列を数値に変換する場合は

  int()

という関数を使えばよい。数字列は、

  ・ x[1]から最後の要素までのすべての数字

が該当し、これを処理できる表現を書かねばならない。これはスライシングを使って

  x[1:]

と表現できる。よって、空欄cにはイの

  int(x[1:])

が入る。


[空欄d]

これは、三角関数の基本問題。

図のような座標軸の場合、斜辺に対するx成分とy成分はそれぞれ単純に

  cos(角度)
  sin(角度)

でよい。したがって、イが正解。


[空欄e]

x1, y1は、出発元の座標が入る。これは、self.xとself.yが情報を保持し続けているので
ウが正解。

本題とは関係ないが、Pythonはこのような複数の変数への一括代入ができるので、読めるようにしておくこと。
2019.10.29 18:05
YGさん  
(No.2)
続き

[空欄f]

変数instsにはparse()の戻り値が入っているので、この中身は空欄c の解説で触れた

  ・ タプルのリスト

が入っている。先ほどの一括代入を応用すれば、タプルの全要素を、別々の変数へ一括代入することもでき、

  code, val = insts[opno]

がそれに該当する。

例えば右辺の内容が('F', 100)であれば、codeに'F'、valに100が入る。

そしてこの場合、marker.forward()のメソッド呼び出しに移る。渡す情報は当然valなので、エが正解。

ここでは最初の空欄f で解説したが、他の2箇所でやっても(最後のだけは難易度が高いが)求められる。


[空欄g]

ループの管理は、内部的にはスタックを使っている。具体的には

  stack[-1]['opno'] : 現在見ているループの開始位置を管理するための情報
  stack[-1]['rest'] : 現在見ているループの残り周回数

である。

codeが'E'の場合は、ループの終端であることを示す。ここで処理を分けるのは、当然ながら

  ・ 残り周回数があるかないか

のためである。ここのif文がTrueの場合、最後に

  stack[-1]['rest'] -= 1

と残り周回数を1減らしていることから、チェック対象の条件が「周回数が残っているか」だとわかる。

ただし処理論理上、restが1でif文に渡った場合「周回数が残ってない」と判断しなければならない点に注意。

よって、「>1」のオが正解。誤ってエを選ばないようにすること。
2019.10.29 18:07
YGさん  
(No.3)
さらに続き

[空欄h]

ループの終端から開始に戻る場合、開始の命令の位置をopnoに設定し直す必要がある。

ただし、その処理が問題文に明記されていないので、空欄hでそれをやるのだとわかる。

opnoの更新処理は1つだけ。アが正解。


[空欄i]

ループが終了した場合の後処理が問題になっている。

スタックで管理しているときに、ループが終わったということは

  ・ 最内ループのために積んだものを、下ろす

ということをしなければならない。そして、内側のループほど

  ・ 上部(即ち、最後に積む)

という仕組みがある点にも注意する。このあたりはスタックの知識も必要。


最後に積んだものを下ろせばいいので、ウのstack.pop()が正解。
2019.10.29 18:08
管理人 
(No.4)
YGさん

解説の投稿ありがとうございます。Pythonの文法的な補足もあり非常によくまとまっていると思います。後ほど解説を掲載する際の参考にさせていただきます。
2019.10.29 21:08

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの投稿はできません。

その他のスレッド


Pagetop