ネットワークコンピューティング実習

1. URL
2. 担当教員
3. TA (ティーチングアシスタント)
4. ネットワークに関する疑問
5. 講義目的: 到達目標
6. 授業方法
7. 成績評価
8. スケジュール
9. 大崎が担当する科目に共通の連絡事項・アドバイス
10. Debian GNU/Linux のインストール
11. UNIX (UNIX とは、ユーザ権限、パッケージ管理)
12. Debian GNU/Linux セットアップ〜パッケージ管理
13. シェル (ファイル操作、リダイレクト、パイプ)
14. X ウィンドウシステム & ウィンドウマネージャ
15. エディタ (Emacs チュートリアル)
16. シミュレータ導入 (インストール、実行、可視化)
17. Python 言語 (1) (名前、変数、式)
18. Python 言語 (2) (文、スコープ、サブルーチン)
19. Python 言語 (3) (オブジェクト指向プログラミング)
20. 最終レポート課題 (実施報告書)
21. シミュレータ解説 (1) (概要、エージェント)
22. シミュレータ解説 (2) (モビリティ、可視化)
23. ソフトウェア設計・実装

Python 言語 (2) (文、スコープ、サブルーチン)

実習の流れ・チーム分けの方針・態度目標

2024/09/25 のものと同じ。

https://lsnl.jp/~ohsaki/lecture/netcompx/2024/#10-1

内容目標

- Python で、ループや条件判定を使った簡単なプログラムを書けるようになる。

- Python で、文字列や辞書を使った簡単なプログラムを書けるようになる。

- Python のジェネレータや関数 filter を使った簡単なプログラムを読めるようになる。

テキスト

https://lsnl.jp/~ohsaki/lecture/netcompx/2024/priv/06.pdf

課題

課題 1

1 から 100 の整数のうち、「偶数でなく」かつ「3 で割り切れず」かつ「1 桁目の数字が 0 または 5 でない」ものを出力するプログラム num.py を示せ。

(実行例)
> ./num.py
1
7
11
13
17
19
23
29
31
37
41
43
47
49
53
59
61
67
71
73
77
79
83
89
91
97

プログラムのテンプレート
https://lsnl.jp/~ohsaki/lecture/netcompx/2024/python-2/num-skel.py

課題 2

コマンド行から半角英数字で構成される文字列を読み込み、 文字列を構成する各文字の出現回数を表示するプログラム count.py を示せ。

(実行例)
> ./count.py hello
h 1
e 1
l 2
o 1
> ./count.py 'I am a Python programmer.'
I 1
  4
a 3
m 3
P 1
y 1
t 1
h 1
o 2
n 1
p 1
r 3
g 1
e 1
. 1

プログラムのテンプレート
https://lsnl.jp/~ohsaki/lecture/netcompx/2024/python-2/count-skel.py

課題 3

課題 1 をジェネレータを使って記述した以下のプログラムを読み解け。

https://lsnl.jp/~ohsaki/lecture/netcompx/2024/python-2/num-generator.py

Generators
https://wiki.python.org/moin/Generators

課題 4

課題 1 を関数 filter を使って記述した以下のプログラムを読み解け。

https://lsnl.jp/~ohsaki/lecture/netcompx/2024/python-2/num-filter.py

Built-in Functions filter(function, iterable)
https://docs.python.org/3/library/functions.html#filter

略解

課題 1

サンプル
https://lsnl.jp/~ohsaki/lecture/netcompx/2024/python-2/num.py

課題 2

サンプル
https://lsnl.jp/~ohsaki/lecture/netcompx/2024/python-2/count.py

課題 3

省略

課題 4

省略

チャレンジ課題

- Python の標準ライブラリのソースコードを眺めてみよ。プログラムのインデントには、空白またはタブのどちらが使われているか、また、インデントの深さはいくつかを調べよ。

- Python 言語のプログラムのインデントには、空白とタブのどちらを使うことが望ましいか。空白とタブのそれぞれの利点・欠点を考えてみよ。

- 空白 4 つのインデントと、空白 8 つのインデントを混在させたプログラムをいくつか作成してみよ。それらののプログラムを実行し、どのような場合にエラーになり、どのような場合にエラーにならないかを調査せよ。

- C 言語で書かれたプログラムを Python 言語に移植してみよ。C 言語のプログラムの行数と、Python 言語のプログラムの行数を比較せよ。C 言語と比較して、Python 言語だとどれくらい少ない行数でプログラムが書けるだろうか。

- プログラミング言語の「表現力」に関する以下の説明を読んでみよ。

Comparison of programming languages - Expressiveness
https://en.wikipedia.org/wiki/Comparison_of_programming_languages#Expressiveness

- テキスト中の、「range(n) は 0 から n - 1 までのリストを作成する組み込み関数である」という説明は厳密には誤りである。range() 関数の公式ドキュメントを読み、上の説明のどこが間違いであるかを答えよ。

- range() 関数を使用して、2〜100 までの偶数を表示するプログラムを示せ。

- REPL で「range(0, 10)」を実行すると何が表示されるかを確認せよ。同様に、「list(range(0, 10))」を実行すると何が表示されるかを確認せよ。これらの実行結果が異なる理由を説明せよ。

- REPL で「range(0, 10)」を実行すると何が表示されるかを確認せよ。同様に、「range(0, 10)[:]」を実行すると何が表示されるかを確認せよ。これらの実行結果が異なる理由を説明せよ。

- プログラミング言語における「式」と「文」の違いは何か。あるコード片が、式なのか文なのかはどうすれば見分けることができるかを考えよ。

- 変数 a と変数 b に 123 を代入する場合、C 言語では「a = b = 123;」のように書ける。Python 言語ではどのように書けばよいかを答えよ。また、なぜそのように書く必要があるのかの理由もあわせて答えよ。

- サブルーチン (subroutine)、手続き (procedure)、関数 (function)、サブプログラム (subprogram) それぞれの英単語の意味を、英英辞典で調べてみよ。それぞれの英単語のニュアンスがどのように異なるかを説明せよ。

- Python 言語で書かれた何らかのプログラムを入手し、そのプログラム中の関数定義を見てみよ。それらの関数は、意味としては、サブルーチン (subroutine)、手続き (procedure)、関数 (function)、サブプログラム (subprogram) のどの名称を使うのがふさわしいかを考えよ。

- テキスト 5.3 節のように、Python 言語では参照渡しができないため、関数呼び出しの副作用として引数の値を変化させるような関数は作れない。Python 言語で inc(x) のような処理を実現するためには、「x = inc(x)」のように書く以外にどのような方法があるかを考えよ。

- Python 言語では、C 言語の「ポインタ」に相当するものは利用できるかを調査せよ。

- 引数のデフォルト値 (テキスト 5.3 節) として、リストや辞書を指定することが望ましくない理由を調査せよ。

- Python では関数定義をネストすることができる (テキスト 5.3 節)。関数がネストできることの利点・欠点は何か。

レポート課題 2024/11/20

「レポート課題 2024/09/25」と同じ。

https://lsnl.jp/~ohsaki/lecture/netcompx/2024/#10-7

質問

- 私は日本語配列のキーボードを使用していますが、Emacsでキーボード入力しようとすると、US配列のキーボードとして認識されてしまいます。日本語配列に対応させることはできないのでしょうか。

もちろん可能です。以下のページを見てください。

Keyboard
https://wiki.debian.org/Keyboard

インストールやセットアップを解説した以下のビデオでも言及したような気がします。

講義ビデオ (パスワードが必要です)
https://lsnl.jp/video/netcompx/2024/

221019-debian-install.mp4
221019-debian-setup.mp4
221019-debian-setup2.mp4 

要望

- 安めのUSキーボードのノートPCの購入を考えています。おすすめのサイトなどあったら教えてください。

  私はいつも eBay で買っています。


[<17. Python 言語 (1) (名前、変数、式)] [>19. Python 言語 (3) (オブジェクト指向プログラミング)]