今回からいよいよPythonを使ったプログラミングを学ぶ. また,第7回の実技テストにむけての準備についても説明するので, 各自,実技テストまでに取り組んでもらいたい.
第1クォーターの「情報基礎」では,コンピュータとネットワークの利用の基礎として, 電子メール,ウェブブラウザ,ワープロ,表計算,プレゼンなどの使い方について学んだ.
それは単に使い方を覚えればよいだけではなく,それらを通じてコンピュータやネットワークで 何ができるのか,どのように利用の仕方があるのかを学ぶことも目的であった.
一方,本科目「計算機実習1」では,まずUnixというオペレーティングシステムを使い, ターミナルからのコマンド入力について学んだ.
これもまた,コマンドの使い方だけではなく,ファイルやディレクトリを操作することで, OSの根幹であるファイルシステムや標準入出力などについて理解することも重要な目的であった.
特に前回は,オプション付きのコマンドとリダイレクションやパイプなどを駆使して, かなり複雑な処理も可能であることが体感できたと思う.
今回と次回の実習では"Python"(パイソン)というプログラミング言語を使って, プログラミングの基礎の基礎を学習する. たった2回の授業では多くのことを伝えることはできない. しかし,プログラミングの学習もまた,単にプログラミングの文法や技術を獲得するだけでなく, コンピュータの仕組みを理解することにつながる.
たとえば,コンピュータの中でデータはどうやって表現され,蓄積されるのか. 演算の手順はどのように記述され,実行されるのかについて考えていくことになる.
※PythonもUnixも,後期セメスターの計算機実習2をはじめ, 今後の情報系・プログラミング系の実習でも使っていく. 本科目で学習するUnixのコマンドやプログラミングについての理解が不十分だと, 今後学んでいく情報系科目の学習にも支障をきたすことにもなる.
いままでのところで,未消化の部分がある人は,なんとか追いついていけるように努力してほしい. また,スキルも知識も一度通り過ぎただけでは蒸発してしまう. ある程度うまく理解できたと思っている人も,もう一度教科書,授業サイトの内容, 参照されている文書を見直し,Unixのコマンド操作を何度でも復習してほしい.
プログラミングとは何をすることか. Pythonとはどういう言語か,いつ開発されたものか. コンピュータ言語とはそもそもどういったものか,だれが何のために作り, どんな歴史をもって変化してきているか.
こういった背景的な知識を得ることは,プログラミングというスキルを身につける上で, 大変重要なことである.
しかし,本実習は実習として手を動かしてもらうことが主眼である. 最低限必要な知識については都度提示するようにするが, 時間の都合上,ゆっくり説明はできない.
あくまでもじっくり理解するには諸君の調査学習に任せるほかない.
用語や概念について,疑問が湧いたらすぐに,ネット検索で解説を探してみよう. かならずしもぴったりの答えが得られるとは限らないが,いくつか読んでいるうちに, わかってくる.
プログラミングの学習でも,これまで同様,教科書・関連文書をよく読み,実際に操作をし, 自分が今なにをやっているのかを充分理解しながら学習を進めること.
課題文などはそのつもりでじっくり,何度でも,しっかりと読む必要がある. ということを覚えておいてほしい.
[ページトップへ]
第7回に行う実技テストは,いままで学習したUnixの基礎的なコマンド操作に関するテストである.
ついては,以下に準備するべきことについてまとめたので,よく読み,次回第6回までにやっておくこと.
<実技テストの準備>
★これは今回の授業が終わってからでよい.
質問があれば,次回にテストについての質問スレッドを立てているので,そちらに書き込むこと.
$ python3▼ Python 3.8.2 (default, Apr 27 2020, 15:53:34) ◀◀ バージョンは環境で異なるかも [GCC 9.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>>
Python 3.8.2 (default, Apr 27 2020, 15:53:34) [GCC 9.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> quit()▼ ← 終了コマンド(関数) $
せっかくなので,対話モードを使って簡単な操作をし,Pythonの動きを見てみよう.
>>> print("Hello World!")▼ ◀◀ お決まりの一発目 Hello World! ◀◀ Pythonからの出力 >>> help(print)▼ ▶▶ 画面が切り替わってprint文のヘルプが表示される('q'で閉じる) >>> a=input()▼ ◀◀ キーボードから値を入力してaに代入 hogehoge▼ ◀◀ キー入力を求められるので,何でもいいから入力 >>> print(a)▼ hogehoge ◀◀ 入力した文字が出力される >>> b=256▼ ◀◀ 色々と代入 >>> c=3▼ >>> d=128▼ >>> print(b+d**c)▼ ◀◀ 計算して出力(**はべき乗演算) 2097408 >>> print(d/c/b)▼ ◀◀ 割り算する 0.16666666666666666 ◀◀ 小数だとこんな感じ >>> quit()▼ $
$$ a=13579246^7\\ b=24681357^6\\ x=\frac{a\cdot 4(a-b)-b\cdot 3(b-a)}{a\cdot b} $$
ここで,最低限守るべき言語のルールや特徴についてごく簡単に説明する. Pythonは高級言語の中では記述がシンプルな言語だと言える. ルールとして注意するべきことは,以下のようにあまり多くない.
ただし,これらのルールを守らないとプログラムとしてうまく動かない. これ以降,何度でも確かめながら,プログラミングを進めること.
【Python予約語一覧】
and | as | assert | break | class | continue | def | del | elif |
else | except | False | finally | for | from | global | if | import |
in | is | lambda | nonlocal | None | not | or | pass | True |
raise | return | try | while | with | yield |
※以上と同じメモをscrapboxに作成したので,必要に応じて参照するとよい.
<
Python::基本ルールと特徴-fujii's公開ノート>
※"#◀◀"から右は解説なので,書かないこと.
※2行目以降,左側の空白はTABで字下げする.
while True: #◀◀ 1行目は字下げせず左端に name=input("名前?:") #◀◀ TABキーでインデント(字下げ)する number=eval(input("回数?:")) for i in range(number): if i%3==0: #◀◀ さらにインデント print("Hello, %s." % name) #◀◀ さらにインデント elif i%3==1: #◀◀ インデント戻す print("\tHey, %s!" % name) else: print("\t\tHello, World!!!")
$ python3 lesson5-01.py
$ python3 work01.py▼ 名前?:藤井大輔 ◀◀ 名前を入れる(適当) 回数?:7 ◀◀ 表示行数を半角数字で入れる(適当) Hello, 藤井大輔. ◀◀名前入りで3行ずつ繰り返し…… Hey, 藤井大輔! Hello, World!!! Hello, 藤井大輔. Hey, 藤井大輔! Hello, World!!! Hello, 藤井大輔. ◀◀ 指定の7行でストップ 名前?:小堀聡 ◀◀繰り返して聞いてくる 回数?:5 Hello, 小堀聡. Hey, 小堀聡! Hello, World!!! Hello, 小堀聡. Hey, 小堀聡! 名前?:^CTraceback (most recent call last): ◀◀ やめる時はCtrl+c File "work01.py", line 2, in◀◀ エラーが出るが…… name=input("名前?:") ◀◀ これは想定内 KeyboardInterrupt ◀◀ キー入力が中断された(そのとおり) $
#!/usr/bin/env python3(これをシェバンと呼ぶ)と追加して,ファイルの属性を「実行可能」にする.
$chmod +x work01.py▼
$ ./work01.pyと,普通のコマンドのように実行できる.
いままでのとこで,最低限のPythonの動かし方はわかったと思う. 次節以降,3-4で書いたプログラムの中身を少しずつ理解していこう.
ここからは,いろいろなWebPageでの解説記事を参照して,効率よく学習していこう. 主として参照するのは,以下のサイトである.
[ページトップへ]
プログラムの中で処理する数値や文字を入れる「容れ物」が変数である. そして,その容れ物に値を放り込むのが代入である.
$ python3 sample1-1.py▼
Pythonは動的型付け言語なので,あまり気にしなくてもいいが,忘れてもいけない, 微妙な設計になっている.
Pythonでは通常は型を気にしなくてもいいが,型変換が必要な場合がある. よく使う場面は「文字列の中に数字を連結」する時や, 「input()関数を使って取得した文字列を数値として演算」する時である.
number=eval(input("回数?:"))
>>> a=input("In: ")▼ ◀◀ evalなしでinput() In: 16▼ ◀◀ 16と半角数字を入れてEnter >>> type(a)▼ ◀◀ type()関数は変数の型名を調べてくれる◀◀ strつまり文字列型になってる >>> print(a+8)▼ ◀◀ a+8を計算してみる Traceback (most recent call last): ◀◀ 見事にエラー File " ", line 1, in TypeError: can only concatenate str (not "int") to str >>> b=eval(input("In: "))▼ In: 16▼ ◀◀ 上と同じ16を入力 >>> type(b)▼ ◀◀ bの型名は…… ◀◀ 整数型と判定された >>> print(b+8)▼ ◀◀b+8を計算したら…… 24 ◀◀ 大成功. >>>
Pythonは他の言語同様,標準で基本的な算術演算が可能である.
▶▶参考(1) とほほのPython入門 - 演算子 - とほほのWWW入門
[ページトップへ]
プログラミングの重要な要素の1つが「分岐」である. 手続き型プログラミング言語はすべて,分岐機能であるif文を持っている. Pythonのif文について学ぼう.
if文の説明にも出てくるが,if/elif/else文,for/while文,def文などは, その文が有効な範囲が長くなることが多い.
ifやforがかかる範囲がどこからどこまでか. この範囲を「処理ブロック」と呼ぶ.
ブロックの有効範囲を決めるのが,Pythonでは「インデント」である.
a,b=0,1 while a<10: # ◀◀whileは繰り返し print(a) # ◀◀ここはインデントあり a,b=b,a+b # ◀◀ここはインデントなし
if文をはじめ,次回学習するfor文while文などには条件式が必要である. この条件式には多くの場合,比較とその組み合わせの論理式が伴う. それには比較演算子と論理演算子を使う.
[ページトップへ]
最後に,非常によく使う入出力の関数,print()とinput()を紹介する.
input()関数は,第4節[3]型変換 ですでに触れているので,ここでは省略する.
[ページトップへ]
2020-07-09 by Kobori Satoshi, Fujii Daisuke