2025/09/24 のものと同じ。
https://lsnl.jp/~ohsaki/lecture/netcompx/2025/#10-1
- Python で、ループや条件判定を使った簡単なプログラムを書けるようになる。
- Python で、文字列や辞書を使った簡単なプログラムを書けるようになる。
- Python のジェネレータや関数 filter を使った簡単なプログラムを読めるようになる。
https://lsnl.jp/~ohsaki/lecture/netcompx/2025/priv/06.pdf
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/2025/python-2/num-skel.py
コマンド行から半角英数字で構成される文字列を読み込み、 文字列を構成する各文字の出現回数を表示するプログラム 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/2025/python-2/count-skel.py
課題 1 をジェネレータを使って記述した以下のプログラムを読み解け。
https://lsnl.jp/~ohsaki/lecture/netcompx/2025/python-2/num-generator.py
Generators
https://wiki.python.org/moin/Generators
課題 1 を関数 filter を使って記述した以下のプログラムを読み解け。
https://lsnl.jp/~ohsaki/lecture/netcompx/2025/python-2/num-filter.py
Built-in Functions filter(function, iterable)
https://docs.python.org/3/library/functions.html#filter
サンプル
https://lsnl.jp/~ohsaki/lecture/netcompx/2025/python-2/num.py
サンプル
https://lsnl.jp/~ohsaki/lecture/netcompx/2025/python-2/count.py
省略
省略
- 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 節)。関数がネストできることの利点・欠点は何か。
講義中に説明した iterator の説明が不正確だったので補足します。
Python には iterator と iterable という概念があり、 どちらも要素の値を順番に返すことができるオブジェクトです。
iterable
https://docs.python.org/3/glossary.html#term-iterable
iterator
https://docs.python.org/3/glossary.html#term-iterator
enumerate() も range() もリストを返すのではなく、 それぞれ interable なオブジェクトを返します。 ただし、enumerate() が返すオブジェクトは iterator でもありますが、 range() が返すオブジェクトは iterator ではありません。
>>> from collections.abc import Iterator, Iterable
>>> e = enumerate([1, 2, 3, 4, 5])
>>> e
<enumerate object at 0x7f9f125edcb0>
>>> type(e)
<class 'enumerate'>
>>> isinstance(e, Iterator)
True
>>> isinstance(e, Iterable)
True
>>> from collections.abc import Iterator, Iterable
>>> r = range(10)
>>> r
range(0, 10)
>>> type(r)
<class 'range'>
>>> isinstance(r, Iterator)
False
>>> isinstance(r, Iterable)
True
iterator は一度使ったら終わりですが、 iterable は iter() 関数で iterator を生成できます。
for 文の引数には、 iterator でも iterable でもどちらでも指定できます (iterable の場合は、 内部で自動的に iter() が呼び出されて iterator オブジェクトが生成されるようです)。
「レポート課題 2025/09/25」と同じ。
[<17. Python 言語 (1) (名前、変数、式)] [>19. Python 言語 (3) (オブジェクト指向プログラミング)]