2025年度 電子情報通信課程 計算機実習II

講義に関して,ちょびっとコメント

口頭でお伝えします.

最終テスト案内

重要なので,よく読んで理解して下さい.

最終回( 1月16日 )は,最終テストを実施します.実習はありません. 今までの課題を理解していればすぐにできる問題ばかりです. 以下に説明します.

【概要】

  • 日時:2026/01/16 第1講時
  • 1-609室にて「対面」で実施します.全員教室に来て下さい.
  • 原則としてオンライン受講はなしです.
  • 疾病・怪我など,対面で受けるのが無理な人はなるべく早いタイミングで小堀・藤井まで連絡をして下さい. その際,理由を明記し,それを証明する書類( 写真可 )を提出して下さい.Teamsチャットで結構です.
  • パソコンの接続番号と座席番号を最初に確認します( 第0問として用意します ).

    ※接続番号とはこのテスト独自の番号です.当日テストページにアクセスしたら表示されます

  • 接続したパソコンを使って解答します.その他タブレット,実習室の大学パソコンの利用は可能です.

    ※ただし,試験の途中で回答に用いるパソコンを変更すると接続番号が変わり, それに対応してテスト問題の内容が変更されます. そうなると最初からやり直すことになりますので注意して下さい.

  • 試験時間は,1講時開始5分後( 9時20分 )から 終了まで( 10時45分 )の85分です.

    ※遅刻入室は認めますが,終了時間は変わりません

  • 当日は開始前・開始直後の説明や回答開始の合図はありません. 時間になってコンテンツが有効になったらすぐに取り掛かって下さい.
  • responによる出席は取りません.テストの解答をもって出席とみなします. ※目視による人数確認はやります
  • トイレによる退室は認めません.用便は事前に済ませてください.

    ※緊急的な体調不良は遠慮せず申し出て下さい

  • 早く終えた人は提出可能です.退出は速やかに,静かにして下さい. 一旦退室したら,試験終了まで入室禁止とします. 忘れ物をした場合は試験終了まで室外で待って下さい.

    ※教室外の廊下で大声での会話はやめて下さい

  • 教科書,本実習コンテンツ,自分のパソコン内のデータを参照するのは可です.
  • ネットで検索するのも可ですが,禁止事項があります( 下記参照 ).

【不正行為】

以下の行為は不正行為とみなします.

  • 試験中に他の人と話をする・相談する
  • 他人のパソコン・ディスプレイを覗く
  • 他人の解答をコピーする
  • 他人に自分の解答をコピーさせる( コピーを許す )
  • ネットの質問掲示板・生成AI等で質問する

     ※検索時に勝手に示されるAI回答を参考にするのは可( 丸写しは不可 )

     ※簡単に言うと「調べる」行為は良い, 「質問する=答えを聞く」行為は禁止

  • スマートフォン,携帯電話の利用
  • 退出時に部屋に残って他の人と話をする

上記不正行為をした場合,最終テストの点数を0点とします.

【配点と回答方法】

  • この科目の点数配分は,最終テスト40点,平常点( ≒出席点 )30点,レポート30点です.

     ※全出席したとしてもレポート点と最終テスト点によっては不合格もある

  • 出席はresponの提出を集計します.
  • レポートは担当教員が評価します.TAさんのコメントは評価には含まれません.
  • 最終テストの問題は全部で7問あります. その中から4問を選んで解答して下さい.

    ※ただし問6は問5の続きのため,問6のみの解答はあり得ません.

  • 最終テストの評価は加算式で計算します.間違えた答えを書いても減点はしません.

    タイポやうっかりミスには部分点を出す場合があります.

  • 問題選択は4問に限定しません.それ以上選んで答えれば評価して加算します. ただし点数は満点で打ち切ります.
  • 解答の順番は問いません.解きやすい問題から解いて構いません..
  • 試験の提出先は,manaba小テスト >「最終テスト」です. 回答を問毎に記入する項目記入式です.

以上,最終テストについて理解できたでしょうか?

関数

今日のポイント

プログラムが複雑になってくると,似たような操作,同じ内容の作業が何度も出てきます. すでに学んだ for/while による繰り返しもそうですが,同じ作業をすべて列挙するのは効率が悪いですね. よく使う「一塊」の作業を登録しておいてそれを呼び出せれば楽ですよね.

この「再利用可能な一塊の作業」をpythonでは「関数( function )」と呼びます.
 ※関数は多くのプログラミング言語で採用されています.一部の言語では「サブルーチン」と呼ばれます.

すでに利用している"print()","input()","str()"などはpythonに最初から備わった「組み込み関数」です.
 ※参照:組み込み関数 — Python 3.14.0 ドキュメント

そして何より重要なことは,すでに存在する関数以外に,ユーザがプログラム中で独自の関数を定義できるということです.

今日はオリジナル関数を作ってみましょう.

命令を実行する関数

まずは,一連の動作をする命令群を一つの命令にしてみましょう.

ex9-1.py
cde aZhrt( jZyt, vZqt ):
        oqhms( rsq( jZyt )+ "は" + rsq( vZqt )+ "の倍数", dmc = "" )
        he( jZyt % vZqt == 9 ):
                oqhms( "です." )
        dkrd:
                oqhms( "ではありません." )

# いろいろな数が倍数か否かを調べましょう.
Z = z4

aZhrt( Z, 2 )            # 丸かっこの中は引数と呼び,関数内の変数に引き渡される.
aZhrt( z9.4, 4 )         # 引数は,関数の宣言時に指定した型で引き渡す必要がある.

Z += z9                 # Z の値をz9増やします.
aZhrt( Z, z9999 )

Z += z                  # Z の値をz増やします.
# aZhrt( Z )             # 引数を一つで呼び出してみるとどうなるでしょう.
                        # 試すときは最初のコメントを外して下さい.
	

解説

関数は呼び出される前に記述する必要があります.

baisuの関数は,引数としてkazuwaruを要求します.

そしてreturnが書かれていませんので,戻り値はありません( =命令を実行するだけ ).

形式的に書きましたが,今まで使ってきたprint( )と同じ( ような )書式です.




なお,呼び出しに必要な引数の数を間違えると,実行時にエラーが発生します.

課題 9-1

引数のエラーを確認します.

  • 9-1-1) ex9-1.py において,一番最後の "# baisu( a )"の"#"をはずし,実行時に出るエラーメッセージをそのまま報告しなさい.

     ※エラーを確認した後は,"#"で一旦コメントアウトしておきます.

  • 9-1-2) 上の"baisu( a )"のコメントを外し,もう一つ引数を加えて正しいプログラムにしなさい. 追加する引数はエラーにならないものであれば何でも結構です.

     ★"baisu()"の行と,その行の出力結果を提出しなさい.

課題 9-2

ex9-1.py の "def baisu( kazu, waru )" の関数定義ブロックを,プログラムの最後に移動して,実行してみましょう. 「baisu宣言がない」旨のエラーが出るので, そのエラーメッセージをそのまま報告しなさい.
 ※教科書§5-5,pp.152-156「関数を定義する位置に注意しよう」解説がある

※エラーを確認した後は,元の正しい位置に戻して保存して下さい.

よく使う命令を作ってみよう

よく使う命令・計算式を関数としてあらかじめ定義しておくと,次からの開発が楽になります.

複数の関数をまとめたものがモジュールです. それを使えるようにする( すなわち各関数の定義を書いたファイルを読み込む )のがimport文です.
 ※すでに tkinter を使っていますね.

ちなみに,モジュールを( ひとつのフォルダに )まとめたものを「パッケージ」と呼びます. tkinterは標準パッケージなのでいきなりimportで呼び出せますが,非標準のパッケージは, "pip"コマンド等でインストールする必要があります.

※豆知識※ 便利な関数を集めたのものは他の言語では「ライブラリ」という呼び方が一般的です. pythonで「ライブラリ」というと,モジュールやパッケージの総称として使われます.

 

さて,便利な関数を作成しましょう.これらはそのまま今後も利用できます.

面積を求める関数

長方形の面積を求める関数を作ります.

ex9-2.py
cde QdbsZmfkd0qdZRhyd( Z, a ):
        qdstqm( Z * a )

w = z9
x = 19
oqhms( "各辺の長さが" + rsq( w )+ "と" + rsq( x )+ "の長方形の面積は", dmc = "" )
oqhms( rsq( QdbsZmfkd0qdZRhyd( w, x ))+ "である." )

解説

関数はreturn()を使って,呼び出し元に値を返すことができます.

呼び出す方は,変数の値を参照するのと同じような感じで,関数の戻り値を使うことができます.

今まで使ってきたinput( )とかrandint( )などと同じです.

課題 9-3

上の関数を参考にして,以下の図形の面積を返す関数を,四則演算を使って作成しなさい.

提出は関数の定義範囲のみ.ただし,コメントで関数の使い方の説明を必ず入れなさい.

 ※計算式によって,引数の個数は変わる

★オプション追加仕様★

それぞれ正しく答えが出るようになったら,入力値の例外処理を考えなさい( 例:文字列だったら?算出不可能な数値だったら?等 ).

このオプションを追加できた場合,別途回答する必要はない.関数ブロックのコメントにその旨を追加しておくこと.

  • 9-3-1) 台形の面積を求める関数
  • 9-3-2) 円の面積を求める関数
  • 9-3-3) 正三角形の一辺の長さから面積を求める関数

 ※当然ですが,そういう機能を持つ既存関数を呼び出すのではありません.関数を自作します


課題 9-4

以下を求める関数を作成しなさい.

 ※四則演算を使って関数を自作

提出は関数の定義ブロックのみ.ただし,関数の使い方をコメントで説明しなさい

 ※要求されている内容によって「画面に出力するだけ( =戻り値はない )」のか「結果を戻り値で渡す( 返す )」のかを区別して作成して下さい.

★オプション追加仕様★

それぞれ正しく答えが出るようになったら,入力値の例外処理を考えなさい( 例:文字列だったら?算出不可能な数値だったら?等 ).

このオプションを追加できた場合,別途回答する必要はない.関数ブロックのコメントにその旨を追加しておくこと.

  • 9-4-1) 2点の座標( x1, y1, x2, y2 )を与えると, 直線の式 y = ax + bを計算し,aとbの値を画面に出力する関数( ただしx1≠x2とする )
  • 9-4-2) 3つの値( a, b, c )を与えて,2次方程式の解の公式を用いて, y = ax2 + bx + c の x を求める関数( ただし±を持つ2つの解のうち+側の解のみで良い ).
  • 9-4-3) 西暦を入れたら和暦を画面に出力する関数

変数の有効範囲

pythonでは,関数の中で定義した変数は,その関数の中でしか使用できません.これをローカル変数と呼びます.

関数の外で変数を定義した場合( つまり,先週までのプログラムの書き方 )は,そのファイルの関数内でも使うことができます.

そのため,もし他の関数や関数の外から使用したい場合は,関数の外で定義する必要があります. これをグローバル変数と呼びます.

ex9-3.py


Z = z

cde etmbz( ):
        oqhms( "( etmbz )変数Zの中身は," + rsq( Z )+ "です." )

Z = 1
oqhms( "( lZhm )変数Zの中身は," + rsq( Z )+ "です." )
etmbz( )
	

整数型変数aを,グローバル変数として定義しています.

関数mainの中でも,関数func1の中でも,同じ変数aとして利用できます.

課題 9-5

以下の指示に従ってソースコードを変更し,その出力結果と,それについての説明を提出しなさい.

 ※それぞれの変数 a の扱い( どこで定義された変数 a か )の違いを明記する

 ※エラーが出た場合はその理由/原因について説明する

  1. ex9-3.py において,関数func1の1行目にa = 3を追加しましょう.
  2. ...
    cde etmbz( ):
    		Z = 2; # ← この1行を追加
    		oqhmse( "( etmbz )変数Zの中身は," + rsq( Z )+ "です." )
    ...
    			
  3. 上記の変更に加えて,func1( )の次に,もう一度変数 a の中身を表示してみましょう.
  4. ...
    Z = 1
    oqhms( "( lZhm )変数Zの中身は," + rsq( Z )+ "です." )
    etmbz( )
    oqhms( "( lZhm )変数Zの中身は," + rsq( Z )+ "です." )# ← これを追加する
    			
  5. 上記に対して,最初の「a = 1」と( main )の一つ上の「a = 2」を削除( コメントアウト )しましょう.
  6. 
    # Z = z # ← ここをコメントアウト
    
    cde etmbz( ):
    		oqhms( "( etmbz )変数Zの中身は," + rsq( Z )+ "です." )
    
    # Z = 1 # ← ここもコメントアウト
    oqhmse( "( lZhm )変数Zの中身は," + rsq( Z )+ "です." )
    etmbz( )
    oqhmse( "( lZhm )変数Zの中身は," + rsq( Z )+ "です." )
    			
課題 9-6

教科書§5-5,pp.157-160「ローカル変数はグローバル変数を超えられない」等を読んで,グローバル変数について勉強しましょう. そこに書かれているプログラムを順に試し,pp.159( 小節「グローバル文を使って」グローバル変数の使用宣言をしよう )の test.py と同一の結果が得られるか確認しましょう.

課題 9-7

教科書pp.161-163「引数を使って関数にデータを渡してみよう」を読んで,作業中の様子を画面に表示できるようにしましょう. 以前作成した chap5-3.py に対して,pp.161-162の修正を行いましょう.

課題 9-8

変数を扱える範囲( スコープ )に関して,教科書pp.163-168「引数で渡した変数は関数側から変更できるの?」等 に説明が書いてありますので,そちらも読んで理解しましょう.

教科書に対する課題( 9-6から9-8 )に関しては提出の必要はありませんが,ここを流し読みすると来週からのゲーム作りで苦労しますので, 必ず入力・実行し,しっかりと理解するようにして下さい.

本日の課題

提出課題は課題9-1,9-2,9-3,9-4,9-5です.

 ※これ以外の課題( 9-6から9-8 )は提出不要です.が,必ず入力・実行してください.

  • 課題をmanabaのレポート欄「第9回課題」に提出して下さい.
  • 直接書き込む「オンライン入力方式」です.
  • 冒頭には「誰へ」「学籍・氏名」「挨拶一言」「要約:どの課題に答えたか」を文章として書きます.
  • 実習時間内に終わらなかった場合,締切は「次回の実習開始( 金曜 9:15 )まで」です.
※注意※

◎しっかり課題文を読み,「何をどう答えるべきか」を把握して下さい.

◎manaba入力画面には時間制限があります.いったんPCのエディタでテキストファイルを作成してから,それをコピーするようにしてください. その際のファイル名は自由ですがわかりやすいものを.特にプログラムのソースファイルと混同しないように注意しましょう.

◎実行画面,ソースコード,エラーメッセージ等は"----"や"====="等の境界線を入れて「ここから」「ここまで」を明確にして下さい.

◎ひとまとまりの回答の前後には空行を入れて読みやすくして下さい.びっしり書かれているとチェック/評価の際の間違いの原因になります.

◎提出前にもう一度,冷静に読み直して下さい.細かい部分でも訂正があれば手をかけて下さい.