2022情報I 2学期
第11回 授業の振り返りより

質問より

情報オリンピックの問題の解答はいくつかの関数が組み合わさっていますが、私の知っている、または使える組み合わせのバリエーションは少ないです。点数を上げるためにもバリエーションを増やしたいと思っていますが、増やすにはどんな方法がおすすめですか。
パソコン室に「情報オリンピック公式問題集」があります。Web上にも過去問がありますよね。やってみて、解けない問題の解説を読みながら、新たな関数を覚えていくとよいと思います。
=と==の違いについてです。自分では=は代入する時、==は数値の比較(等しいか、等しく無いか)に使うと理解してるのですが、この理解でいいのですか?
それで合ってます。11回目のスライドにも明示されています。=は代入の記号、比較演算子は==です。
教科書にPythonの隣に書いてあるscratchというプログラミング言語は、何ですか。小学生や中学生用の簡単なものですか。
Scratchはビジュアルプログラミング言語といって、ブロックを組み合わせてプログラムを作るものです。小学校・中学校のプログラミングの授業では大人気です。今の1年生でもやったことがある生徒も多いようです。今後、小・中学校でScratchを学んだ生徒が高校に進むと、この絵を見ながら「こういうことね」とPythonのプログラムを理解するようになると考えられます。
Pythonよりも指示が甘くても動いてくれるものってありますか?あれば、それはどんなデメリットがありますか?
1学期にやったドリトルはPythonより指示が甘くても大丈夫ですね。全角でも半角でも同様に動作してくれるのですが、その処理などもあって動作が遅くなっています。指示が正確でないと動かないというのは、プログラミング言語にとっては大切なことで、間違ったまま動いては危険だからです。
今日行ったプログラミング練習の22,23が基本的なプログラミングのスライド通りにやってもエラーになるのはなぜでしょうか。print(moji)のところなどでエラーが起きているようです。友達が同じプログラムを書くとうまくいきます。
Googleコラボラトリーでその症状が時々見られます。練習問題の6,7,9,10あたりでうまく動かなくなり、以降、正しいのにエラーが出るようです。練習問題の6,7,9,10のセルを削除したり、新たにNotebookを開いたり、JupyterNotebookでやると動きます。
vsコードでやることはできないんですか
VSCodeでPythonのプログラムを書くと便利ですね。自分のパソコンならVSCodeでプログラミングできるように設定できるのですが、個人アカウントに設定が紐付けられるので、全員の設定をすべてのパソコンでやらないと使えるようになりません。パソコン室のパソコンにはいっているVSCodeの設定を変えて使ってもらってかまいませんが、毎回設定し直す必要があります。
コラボラトリーへのログインは自分のアカウント(2022-@metro.ed.jpではないもの)ですか?
GoogleコラボラトリーはGoogleのサービスなので、Googleのアカウントが必要になります。学校で配布しているのはMicrosoftのアカウントですから、Googleアカウントは別途ご用意ください。

感想より

自分でプログラムを書くことはできるのに基礎力チェックなどで実行結果を当てることができない。この問題点は、あらかじめゴールが明確に設定されている場合(Helloと表示する、など)は対応できても、例えばある規則に従って数値を並べることが必要な場合に逆算してプログラムを書くことができない可能性があるということだ。さらに問題だと思うのはプログラムを書くときは大抵、後者の方が求められるだろうということだ。つまり、早急に必要なことは(単なる知識ではなく)プログラミング的思考を養うことだと思う。知識×思考がプログラミングの鍵である。
そうですね。共通テストにもプログラミングの問題が出ると考えられますが、マークシート方式の問題なので、自分で書くということはできません。ある指定された処理をするのに、どうやったら良いかを選択することになりますよね。
プログラミングのコードはあっているのに上手く作動しないというケースに初めてあった。なんで作動しないのかなぁと疑問に思った。
GoogleコラボラトリーやJupyterNotebookは他のセルの実行結果が別のセル影響する特徴があります。同一変数名を別のセルで使うと、型のエラーが出てしまいます。プログラムを分割して書けて便利なのですが、思わぬエラーが出ることがあります。
プログラミングは奥がとても深いことがわかった。間違ってはいけないプレッシャーなどがとても強く感じました。
間違ってもいいんです。間違いを直せることが重要なんです。エラーメッセージを読んで何が原因なのかを探ることで、理解が深まっていくのです。
練習問題は基本的なプログラミングのスライドを見ればできるものばかりだと気が付いた。
基本的なプログラミングと見て打っていたら練習になりませんね。わからない時は参考にして、自分でプログラムを書く練習をしましょう。
二桁の整数の値をどうやって十の位と一の位に分けるのか分からなかった。
二桁の整数Nが入力されたとき、10の位は N//10 で、1の位は N%10 ですね。フローチャートに書いてありましたよ。三桁の整数Mの場合、100の位は M//100 10の位は(M//10)%10 1の位は M%10 で求められます。
情報オリンピックでは言語の選択の一番上はC++という言語だったが一般的にはPythonよりもC++のほうがよく使われるのか気になった。
広く一般的に使われるようになっているのはPythonです。Pythonの方が簡単、つまり人間が理解しやすい、ということはコンピュータには難しい言語なのです。実行するときにコンピュータに理解できるよう「翻訳」しながら実行するので、動作は遅くなります。C++などはもう少しコンピュータ寄りの言語で、Pythonよりも利用範囲が広いのですが、ちょっと敷居が高いのです。
こんなにも複雑でやり方が無限にあるプログラミングでも、基礎は単純な3つの構造であることが面白いと思った。やはりここでも前回の振り返りに書いたように、こんな複雑で難しいプログラミングが3つの構造だけでアルゴリズムを説明できるのかという疑問が残った。
現在の皆さんが使っているようなコンピュータのプログラムであれば、すべて3つの制御構造で説明できます。複雑というのは入力に応じていろいろ変化するということだと思いますが、if文のような分岐構造ですべての入力に対応できるようプログラミングされているのです。何度も書いてますが、コンピュータは何も理解できなくて、あらかじめ指定された手順に従って動いています。つまり、すべての動作は事前に指定されていて、手順に従って高速に動作しているのです。
inputの文は文字しか入力できないので、普通にやると数字に変える手間がかかるが、int(input())の文を使うとその手間が省ける上に、変数がいくつも出てこなくてプログラムが見やすくなるので、一見小技程度に見えてかなり便利になると感じた。
int(input())って便利なのですが、ここに文字を入力されるとエラーになっちゃうんです。数値を入力と限定されている場合にしか使えないので注意が必要です。
普段使っているclassiやGoogle フォームなどのアンケートでは入力する欄にinputが使われているのかなと思った。
ClassiやGoogleフォームはブラウザで表示されてますよね。これはHTMLで書かれていて、プログラミング言語とはまったく関係ありません。HTMLでユーザに入力させるには確かにinputというタグを使いますが、これはPythonで命令しているものではなく、入力の枠を表示するタグなのです。英語でinputって入力という意味なので、いろいろなところで使われているんです。
プログラミングは、間違えないように見直しをするのではなく、とりあえず実行してみて、失敗してもその失敗から学べばいいことがわかった。
夏休みや2学期、progateをしっかりやっていたため、スラスラとコードを書くことができた。最後まで終わらせることができたのはとても嬉しく、爽快感があった。今後も授業でプログラミングをやっていくと思うので普段からそういったプログラムに触れ、授業に遅れを取らないように頑張っていきたいと思う。
いままで情報オリンピックは、本当に情報に強い人達が集まってやるもので自分には程遠く、関係のないものだと思って参加する気はなかったけれど、先生の話を聞いて、残せた功績は後々の進路に役立つし、良い功績が残せなかったとしても、そのような企画に自主的に参加するという意思が一番大切なのだということが分かった。
先生が間違えるよりも間違いをつぶすことが大切と仰っていたように、脳内で完璧なプログラムを完成させてから打ち込むよりも、まず打ち込んでみて間違えたところを修正していくサイクルが必要だと思いました。
今まではパイソンの命令と形を覚えようとしていたが、今回の制御構造の授業を経て、その手順を考えながら作業することが重要なのだと感じた。基本的なプログラミングを前回やった時はそのような手順など意識せずにやっていたのが、今回はそれを意識して行ったので、だいぶ理解しながら進めることができた。また今回の授業で、先生が一つの結果に対する複数の方法を示していらっしゃったのを見て、同じ結果でもそこにたどり着く方法はいくつもあるというのがとても面白いと感じた。
HTMLと同じように、プログラムを自分で実際に書いてみると理解が深まってとても良いことが分かった。一つひとつの記号が重要で、少しでも違うとコンピュータは動かないのだということも、最近ようやく分かってきた。
Pythonの練習ができて楽しかったです。数値に変換するのが曖昧になっていたのでもう一度復習をして定着させたいです。なんでエラーが出るのかを考えるのが面白くなってきました。
エラーから学ぶことが大切、と言われてたのを実際にやってみて実感できた。出来てもわざとエラーを出るようにしてみたりすると自分の中で理解が深まっていったのが感じられた。プログラミングは技を習得→組み合わせて大きな問題を解決→その過程を「技とする」という数学に似たところがあるように感じられた。またサーフェスからコラボラトリーを使ってみたらanacondaより明らかに使いやすかったので、今後はコラボラトリーを使っていきたい。
エラーを直すために色々と試行錯誤して入力していくのが楽しかった。フローチャート化されるとどんなことがしたいのか目で見てよくわかった。
コンピュータはそれ自身が情報を入力すると、判断して動くのかと思っていたけど、動くためには動くためのデータが必要なことがわかった。
プログラミングにおいてエラーが出たら心の中で叫んでいる自分がいることに気がついた。自分でどこが違うのか、どう直せば良いのかなど自分で考えることができた。自分で深く考えることで、その次からの間違いが減っていた。これからもこのような間違いを大切にしていきたい。
プログラミングはゴールへ辿り着くためにいくつか道があって、「基本的なプログラミング」にない解き方もあるわけだが、どのような順序でそれが求められたかしっかり意識できることが大切だと思った。
プログラムを一つ一つ順を追ってできたので、理解しやすかった。英語と同じように、単語だけでなく、int(input())などの熟語のようなものを使えるようになると、一気にプログラムが書きやすくなった。
プログラムを打つ上で、' 'や" "で括り忘れたり、intやstrを付け忘れたりしてエラーになることが多いので、今自分が扱っているデータが文字列なのか数値なのかを確認しながら進めることが大切だと思った。
一個前の問題の応用が次に続くのでコピペで効率化することができた。プログラミングではこうした効率化の積み重ねが大事になるのだと思った。
基本的なプログラミングを何回かやっていたので、練習問題はスラスラできましたが、「10の位と1の位が等しいとき、等しくないとき」のプログラムでつまずきました。どうすれば10の位と1の位で数値を分けられるのか分かりませんでした。フローチャートではN//10、N%10の結果を変数に代入していたのでやり方や原理はわかりましたが、1から自分で思いつかない気がしました。情報オリンピックの3、4問目でも整数の処理の仕方、つまり演算子の使い方でつまずきました。整数の処理は経験を積むことで演算子を上手く使えるようになると思うので、色々な整数の処理のプログラムを作成してみようと思いました。
基本的なプログラミングを通して数字が文字であることと数値であることの違いは理解できていたが、数字を打ち込んで計算するプログラムでは毎回inputを変数に入れてから数値にしていたから、int(input())も使えるように練習しようと思った。また、文字列はリストとして扱えることを知り、第三回の情報オリンピックではこのことを活用して3問目と4問目に挑戦したいと思った。
今回の授業でGoogle Colaboratoryを使用したが、Google Colaboratoryはファイルごとにプログラムを分けて保存することができ、エラーが起きたときに原因を教えてくれるのが長所だと思った。文字列は、print(〇〇〔1:3〕)で1番目(2番目)の数は含まれるのに3番目(4番目)の数は含まれないのが複雑でなぜこのような仕組みにしたのか疑問に感じた。ただこういう厳密で複雑なルールがあることで注意深くプログラミングに取り組むことができると考えた。練習問題を解いていて、自分が1年前には全く理解できなかったプログラミング言語を使って自らの手でプログラムを書いているのが不思議で、しかもそれにパソコンが従って動くのがおもしろかった。エラーが出るたび自分が気づかなかったことに気づかされて、自分がコロンを忘れる癖があることが分かった。
今回実際にプログラミングしてみて学んだことがたくさんあった。inputをimputと書いてしまったり、input(Number?)のようにクォーテーションマークを付け忘れたり、数字にクォーテーションマークを間違えてつけたり...実際にやってみると学ぶことが結構あった。先生の言ったように「実際にやる」ってことが結構大事であることが分かった。
自分でコードを考えて打ってみて、成功するまで試行錯誤を繰り返すということは大切であると感じた。これがプログラミングにおけるアウトプットだと思う。よく勉強ではインプット:アウトプット=3:7だと聞くが個人的にはプログラミングは実習に近いためアウトプットの割合を増やしたほうが良い。要するに、プログラミングは体で覚えたほうが効率的であると考える。
自分の手でプログラミングを書くのと問題を解くのとじゃ違った。実際に書いてみるほうが問題を解くうえでも役に立つと思った。
実際にプログラミングをしていると、アルゴリズムが明確な言葉で細分化されていて、なおかつフローチャートで表記されていると非常にわかりやすいということが身にしみて感じられた。
情報オリンピック第一回目の一問目はまずinputで与えられる文字を数値化して、計算するとできる簡単な問題だったとわかったが、当日は全然わからなかった。やはりプログラミングは何回もミスをしてリトライすることが大事であり、粘り強さが大事であるとおもった。
先生でもprintやsplitのつづりを間違えていたり自分でもhtmlのhrefのつづりを間違たことがあったり意外とエラーの原因は単純なところにあるのかもしれないと思った。難しいことばかり考えていると根本的なところに気付きにくくなってしまうので、一度文の始めから見直したほうがいいと思った。
第二回の情報オリンピックを受けるために少しPythonを勉強したから、簡単なプログラムなら書けるようになったと思う。でも勉強した以外のプログラムを書くのには時間がかかるから、もっと色々な知識をつけたい。プログラミングは数学の難問を考えるのに似ていて楽しい。

自己評価集計

自己評価集計

ワードクラウド

3つのキーワード

3つのキーワード
感想や気づき

感想や気づき
テキストマイニング 無料ツール by ユーザーローカル
前のページに戻る