2017/10/24 通信処理ネットワーク研究室 河田直樹
※始める前に日本語入力切替機能のインストールを ここ から済ませておくとよい(upgradeはしない)
今日は Python3系の学習 と ラズパイを使ったLEDチカチカ を行う.
Pythonにはバージョンがあり,Python2系とPython3系に分かれる.
前回Python2系の学習を行った(時間の関係でそこまで進んでいない人がほとんどだと思うが).
今回はより使い勝手の良いPython3をメインに学習する.
そのあと,PythonとラズパイのGPIOを使ってLEDを点滅するプログラムを書いてもらう.
Python2からPython3になって大きい変更点は以下のようになっている.
インタプリタは以下のコマンドを入力することによって開始できる.
$ python3
これでプログラムを書き込める状態になる.
例でプログラムを打ち込んでみる.
>>> print ("Hello World") Hello World
このように即座に入力したプログラムに対する処理が行われる.
※ファイルの作成方法,エディタについては
「第一回 1-5. コマンド」を学ぶの nanoコマンド を参照
ファイルからは以下のコマンドを入力することでプログラムが実行される.
$ python3 ファイル名
あらかじめ以下のプログラムを記述したファイル test.py を用意する.
作成したtest.pyの中身
print ("Hello World")
そしてtest.pyファイルをPython3で実行すると以下のようになる.
pi@raspberrypi:~ $ python3 test.py Hello World
このようにプログラムを実行することができる.
前回はインタプリタでPython2の構文を紹介したが,今回はファイルから実行する形式でPython3の基本的な構文の紹介をする.
文字や数値,式の結果などを出力する関数
print ("文字列") print (式や変数などの値)
「"」や「'」を使わずに以下のように数値を入れれば計算結果を出力することもできる.
具体例
作成したtpri.pyの中身
print ("1+2") print (1+2)
コマンドラインでの実行結果
pi@raspberrypi:~ $ python3 tpri.py 1+2 3
宣言するときのルール
[False, None, True, and, as, assert, break, class, continue, def, del, elif, else, except, finally, for, from, global, if, import, in, is, lambda, nonlocal, not, or, pass, raise, return, try, while, with, yield]
配列のようなもので,データをまとめるときに使う.
まとめるデータは型の種類が違っていてもよい.
添え字は0からスタート
変数名 = [数値1,文字列1,...]
具体例
作成したtlis.pyの中身
list = [2014,2015,2016,2017] print (list) print (list[3])
コマンドラインでの実行結果
pi@raspberrypi:~ $ python3 tlis.py [2014, 2015, 2016, 2017] 2017
文字列は「'」(シングルクォーテーション)と「"」(ダブルクォーテーション)の両方で表現できる.
str()やint()で以下のように文字列から数値へ,またその逆へと変換することができる.
また,異なった型を合わせようとするとエラーが出る.
具体例
作成したtsi.pyの中身
s = "100" print ("文字列s:100 を出力") print (s) print ("int(s):数値に変換した100 と数値200を+で加算") print (int(s) + 200) print ("数値i:100 を出力") i = 100 print (i) print ("str(i):文字列に変換した100 と文字列200を+で連結") print (str(i) + "200")
コマンドラインでの実行結果
pi@raspberrypi:~ $ python3 tsi.py 文字列s:100 を出力 100 int(s):数値に変換した100 と数値200を+で加算 300 数値i:100を出力 100 str(i):文字列に変換した100 と文字列200を+で連結 100200
input関数で以下のように入力の受け取りができる.
変数名 = input("文字列")
具体例
作成したtinp.pyの中身
a = input ("入力:") print (a)
コマンドラインでの実行結果(「test」を入力)
pi@raspberrypi:~ $ python3 tinp.py 入力:test test
if文は条件分岐を行える.
インデントでブロック構造を表現する.
if 条件式1: 条件式1が真の時の処理 elif 条件式2: 条件式1を満たさず、条件式2を満たす時の処理 else: 条件式1も条件式2も満たさない時の処理
具体例
作成したtif.pyの中身
n=2 if n<=0: print ("nは0以下") else: print ("nは0より大きい")
コマンドラインでの実行結果
pi@raspberrypi:~ $ python3 tif.py nは0より大きい
条件を満たしている間だけ繰返し.
インデントでブロック構造を表現する.
while 条件式: 条件式が真の時の処理1 条件式が真の時の処理2
具体例
作成したtwhi.pyの中身
num = 0 while num<5: print (num, "hello") num += 1
コマンドラインでの実行結果
pi@raspberrypi:~ $ python3 twhi.py 0 hello 1 hello 2 hello 3 hello 4 hello
オブジェクトに含まれる要素の数だけ繰り返し
インデントでブロック構造を表現する.
for 変数 in オブジェクト: 実行する処理1 実行する処理2
具体例
作成したtfor.pyの中身
※range(x,y)は[x,...,y-1]のリストを意味する.
下の例だとrange(0,5)は[0,1,2,3,4]となる.
for num in range(0,5): print (num, "hello")
コマンドラインでの実行結果
pi@raspberrypi:~ $ python3 tfor.py 0 hello 1 hello 2 hello 3 hello 4 hello
基本的な構文だけでできる項目と追加で知識が必要な項目に分けて出題する.
問題に入る前にC言語とPtyhon言語を比較するために具体例を示す。
入力された整数が素数か否かを判定するプログラム
pythonの特徴はインデントによるブロック構造の表現である。
これによりほかの言語よりも比較的簡単に実装できる。
(1) 1から50までの和を計算して表示せよ
(2) 整数を入力させ,入力された数字の偶数・奇数を判別して表示せよ
(3)次の計算結果を予想せよ
1. 1 + 2
2. 3 + 1.2
3. 1 + True
4. [3,1,4][False]
(4) 1から100までに存在する奇数の足し算結果を出力せよ.
(5) 1から100までの数をプリントするプログラムを書け.
ただし3の倍数のときは数の代わりに「Fizz」と,
5の倍数のときは「Buzz」とプリントし,
3と5両方の倍数の場合には「FizzBuzz」とプリントすること.
(1)与えられた数が素数かどうか調べるプログラム(自作関数を使おう)
(2) 次のHello関数を Hello() 以外で呼び出せ
def Hello(): print ("Hello")
(3)1-99までの奇数と偶数を表示する(自作関数を使おう)