前言
授業中で寝ちゃった
IoT知識
略
python
pythonプログラミング(6)
一、内包表記
1.リスト内包表記
-
基本形 [expression for item in iterable]
-
例: for文を用いた記述
-
等価な内包表記
-
条件付き内包表記
-
等価なfor文での記述
-
ネストした内包表現
2.辞書内包表記
-
辞書の生成
-
{key_item: value_item for item in iterable}
3.集合内包表記
-
集合の生成
-
{item for item in iterable}
4.ジェネレータ内包表記
-
形式: (expression for item in iterable)
-
系列(シーケンス)を順次生成するオブジェクト
-
利用方法: 巨大なシーケンスを一度に生成すると巨大 なメモリ空間を消費するが,順次生成すれば,巨大な メモリ空間は必要ない
-
次の値を生成する関数 next
二、関数
1.関数
-
関数
- 入力値を受取り、計算を行い、結果を出力する複合文
- 再利用が可能
-
関数の呼び出し
-
書式
-
関数名(引数の並び)
-
2.関数の定義
-
書式
def 【関数名】(【引数の並び】):
【関数の定義】
- def 関数定義の開始
- return 出力(戻り値)の記述
-
呼び出し方法
- 関数名(引数の並び)
3.関数についての補足
- 引数の個数
- 0個でも良い 例: foo()
- 2個以上でもよい 例: foo(x, y)
- 戻り値
- return で指定
- 戻り値を記述しないと None が返される
4.組込み関数
- システムがあらかじめ提供している関数
- print 文字列をコンソール画面に出力
- len 文字列などのオブジェクトの長さ
- str オブジェクトをstrデータ型の文字列に変換
- int 整数の文字列もしくは浮動小数点数のオブジェクトを 整数に変換
- float 数字の文字列もしくは整数のオブジェクトを浮動小数点数に変換
- input 標準入力から情報(文字列)を入力する関数
5.階乗関数
-
関数の定義の中で自分 自身を呼び出す関数
-
階乗関数の定義
-
ループ版の階乗関数
6.フィボナッチ数
-
フィボナッチ数列: 0,1,1,2,3,5,8,13,21,34, ⋯
-
定義
7.ハノイの塔
問題:
-
大きさの異なる𝑛枚のドーナツ状の円盤が杭Aに置いてある
-
これらの円盤を杭Aから杭Bに最小の手数で移動せよ
-
移動するときには,杭Cを用いても良い
-
ただし,小さい円盤の上に大きい円盤を乗せてはいけない
回答:
-
杭Aに置かれた𝑛 − 1枚の 円盤を杭Cに移動する
-
杭Aに置かれた円盤を杭B に移動する
-
杭Cに置かれた𝑛 − 1枚の 円盤を杭Bに移動する
-
ハノイの塔問題を解くプログラム
三、組込み関数
四、グローバル変数とローカル変数
1.変数のスコープ
- グローバル変数
- 関数やクラスの外で定義された変数
- プログラムのどこでも読み書き可能
- ローカル変数
- 関数やクラスの中で定義された変数
- 定義された関数やクラスの中でのみ有効
2.グローバル変数の例
-
グローバル変数へのアクセス
-
関数の中でグローバル変数に書き込む場合には global宣言が必要
-
global宣言がないと、xはローカル変数と見なされ、 値が代入される前に参照されるのでエラーになる
-
UnboundLocalError
3.ローカル変数の例
-
ローカル変数は関数の外からアクセスできない
-
ローカル変数は関数の外からアクセスできない
-
五、例外処理
-
b=0の場合にはどうなるか?
-
注:0割り算エラーは,整数割り算 //,剰余%の演算でも発生する
-
0割り算例外を検出して対応する記述
-
0割り算と不正入力例外を検出して対応する記述
演習課題
演習課題1
# 次の内包表現と等価なプログラムをPythonで作成しなさい。
rows = range(1,3)
cols = range(1,4)
cells = [(row,col) for row in rows for col in cols]
print(cells)
# [(1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3)]
# 答
cells2 = []
for row2 in rows:
for col2 in cols:
cells2.append((row2,col2))
print(cells2)
# [(1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3)]
演習課題2
フィボナッチ関数を再帰を用いないで,ループを使っ て記述しなさい。
$$ 𝐹(0)=1 $$
$$ 𝐹(1)=1 $$
$$ 𝐹(𝑛)=𝐹(𝑛−1)+𝐹(𝑛−2), 𝑛>1 $$
ヒント : フィボナッチ関数の定義式を用いて, $ 𝐹 (𝑛) $ の値を, $ 𝑛 = 2, 3, 4, … $ の順に計算すればよい。
def fib(n):
if n == 0:
return 1
elif n == 1:
return 1
else:
return fib(n-1)+fib(n-2)
n = fib(2)
print(n)
n = fib(3)
print(n)
n = fib(4)
print(n)
n = fib(5)
print(n)
# 2
# 3
# 5
# 8
LJT约出门逛逛,昨天因为公司学习会没得去。现在约了出门去逛逛,走了 。20200616 19:36