====== Python for beginners ====== **Pythonチュートリアル Level0** ここではGoogle Colaboratory上でちょっとした計算ができる程度の知識とスキルを手っ取り早く身につけるために必要な事項を紹介します。 ===== 説明のための説明 ===== サンプルプログラムを理解するのに必要な「コメント」と''%%print%%''関数の簡単な使い方を覚えましょう。また、変数とか値とかいう言葉はひとまずc言語と同様に考えてください。 * 「#」(ハッシュ記号)が出てきたらそれより右はコメントです。 * 等号 ''%%=%%'' は変数に値を代入するときに使います * ''%%print%%''関数は括弧の中に書いた文字列や数値、変数、計算結果などを画面に出力します。 # この行はコメントです value = 1 # value という名前の変数に整数値1を代入しています # この位置にコメントを書くこともできます text = "# これはコメントではありません" # ここからコメントです print(text) print("Value = ", value) # コンマで区切ると二つ以上のものも1行に出力できます。 # これはコメントではありません Value = 1 ===== 数 ===== 整数や実数の計算について、''%%+, -, *, / ,(,)%%''はc言語と同じように動作します。 ''%%print%%''関数の中に直接式を書いてもいいし、変数を使って計算することもできます。変数は宣言する必要はなく、代入するたびに新しく生成されます。代入をせずにその変数を使おうとするとにエラーになります。 minute = 60 # 1 minute = 60 seconds hour = 60*minute day = 24*hour year = 365*day print("1 yesr =", year, "seconds") 1 yesr = 31536000 seconds * 除算 (''%%/%%'') は常に実数を返します。 ''%%//%%'' 演算子は 小数部を切り捨てた整数を返します。 * 剰余は、''%%%%%'' で求めます。 * 冪乗は ''%%**%%'' をつかいます。実数冪も使用できて ''%%3**0.5%%''$=\sqrt{3}$となります。 * 数式中に整数と実数が混ざっていると自動的に実数に変換して計算を行います。 print(2 + 2) print(50 - 5*6) print( (50 - 5*6) / 4 ) print(17 / 3) # 除算は浮動小数点数を返す print(17 // 3) # 整数除算は小数部を切り捨てた整数を返す print(17 % 3) # % 演算子は剰余を返す print(2 ** 7) # 2の7乗 print(3 ** 0.5) # ルート3 print(4 * 3.75 - 1) # 整数と実数が混ざっていると自動的に実数に変換して計算 4 20 5.0 5.666666666666667 5 2 128 1.7320508075688772 14.0 ===== 文字列 ===== 文字列は単引用符 (''%%'%%'') で囲むか、もしくは二重引用符 (''%%"%%'') で囲みます。どちらでもかまいません。 print('Hello, World.') # 引用符 Hello, World. ''%%+%%'' で文字列を連結する (くっつけて一つにする) ことができます a = "Hello, " b = 'World.' # 単引用符  '  でも二重引用符  "  でもどちらでもかまいません。 print(a + b) Hello, World. ===== リスト型 (list) ===== コンマ区切りの値 (要素) の並びを角括弧''%%[%%'', ''%%]%%''で囲んだものはリスト (list)と呼ばれます。 リストの個々の要素に対する操作、はc言語の配列のように ''%%リストの名前[要素の番号]%%''で行います。要素の番号は0から始まります squares = [1, 4, 8, 16, 25] print(squares) print(squares[2]) squares[2] = 9 print(squares) [1, 4, 8, 16, 25] 8 [1, 4, 9, 16, 25] リストは''%%+%%''で連結できます。 squares = [1, 4, 9] squares = squares + [16, 25] print(squares) [1, 4, 9, 16, 25] ''%%リスト名.append(付け加える要素)%%''とすることで要素を付け加えることができます。 squares = [1, 4, 9, 16, 25] squares.append(36) print(squares) [1, 4, 9, 16, 25, 36] 組込み関数 len() をつかうとリストの要素数が得られます。 squares = [1, 4, 9, 16, 25, 36] print(len(squares)) 6 リストを入れ子にできます。これはc言語の2次元配列のように使えます。 a1 = [1.1, 1.2, 1.3] a2 = [3.1, 3.2, 3.3] x = [a1, a2] print("x = ", x) print("x[0] = ", x[0]) print("x[0][1] = ", x[0][1]) x = [[1.1, 1.2, 1.3], [3.1, 3.2, 3.3]] x[0] = [1.1, 1.2, 1.3] x[0][1] = 1.2 ===== if文 ===== if 条件: 条件成立時の処理 else: 条件不成立時の処理 でc言語のifと同様のことができます。コロン(''%%:%%'')を忘れないようにしてください。いくつかの命令をまとめるときはc言語では括弧''%%{}%%''を使いますが、pythonでは字下げが同じ行はひとつのまとまり(ブロック)と扱われます。 ''%%else%%''のブロックは省略することもできます。 > pythonでは字下げに常に注意してください。 c言語で一番多い間違いはセミコロンのつけ忘れですが、 pythonで一番多い間違いは字下げの間違いです。 条件にはc言語と同様に、 ''%%<%%'' (より小さい)、 ''%%>%%'' (より大きい)、 ''%%==%%'' (等しい)、 ''%%<=%%'' (より小さいか等しい)、 ''%%>=%%'' (より大きいか等しい)、および ''%%!=%%'' (等しくない)、が使えます。 # flagの値を変更して実行してみてください flag = 0 if flag > 0: print("この行はifの中です") print("この行もifの中です") else: print("この行はelseの中です") print("この行もelseの中です") print("この行はif-elseの外です") この行はelseの中です この行もelseの中です この行はif-elseの外です 条件の中で、''%%==%%'' (等しい)は実数に対しては使ってはいけません。 if 0.1*0.1 == 0.01: print("0.1*0.1 == 0.01") else: print("0.1*0.1 != 0.01") 0.1*0.1 != 0.01 ===== for 文 ===== Python の ''%%for%%'' 文は、c言語の for 文とは全く違いますが、同じような場面でつかわれます。Python の ''%%for%%'' 文は、リストの各要素に対して反復処理を行います。反復の順番はリスト中に要素が現れる順番です。 使い方は、 for 変数 in リスト: 反復処理 反復処理が複数あるときは字下げを同じにする のように書くと「リスト」の要素が順番に「変数」に代入されて、リストの要素の数すなわち''%%len(リスト)%%''の回数だけ反復処理が行われます。 xdata = [0, 1, 2, 3, 4, 5] for x in xdata: print(x*x) print("この行はforの中です") print("この行はforの外です") 0 この行はforの中です 1 この行はforの中です 4 この行はforの中です 9 この行はforの中です 16 この行はforの中です 25 この行はforの中です この行はforの外です ==== range() 関数 ==== 数列に対して反復を行う必要がある場合、組み込み関数 ''%%range()%%'' が便利です。この関数を ''%%range(n)%%''のように呼び出すと''%%[0, 1, 2, ..., n - 1]%%''のような''%%0%%''から''%%n - 1%%''までの''%%n%%''個の要素をもった「リストのように使える数列」を作り出します。 for x in range(6): print(x*x) 0 1 4 9 16 25 ==== break 文 ==== ''%%break%%'' 文は、C 言語と同じく、最も内側の ''%%for%%'' ループを中断します。 for x in range(10): print(x) if x == 5: break 0 1 2 3 4 5 ===== ユーザ定義関数 ===== 関数は''%%def%%''を使って def 関数名(仮引数): 仮引数を使った戻り値の計算 字下げを揃える return 戻り値 のように定義します。 やはりここでもコロンと字下げを忘れずに。 def square(x): y = x**2 return y def cube(x): y = x**3 return y print(square(3)) print(cube(2)) 9 8 ===== 主な組み込み関数 ===== 既に * ''%%print%%'': 画面に文字を出力する * ''%%len%%'': リストの要素数を返す * ''%%range%%'': リストのような数の並びを生成する などを使ってきました。 これ以外にもpythonには多くの組み込み関数が用意されています。ここでは特によく使うものだけ紹介します。 * ''%%abs%%'': 整数や実数の絶対値を計算する * ''%%max%%'': リストの要素もしくは引数の最大値を返す * ''%%min%%'': リストの要素もしくは引数の最小値を返す * ''%%sum%%'': リストの要素もしくは引数の合計を返す print(abs(-1)) x = range(11) print(len(x)) print(max(x)) print(min(x)) print(sum(x)) 1 11 10 0 55 ===== 標準数学関数 ===== 三角関数や指数関数などの初等関数を使用するときは標準数学モジュールを読み込みます。 関数を使用する前に from math import * を実行することで * 三角関数:''%%sin%%'', ''%%cos%%'', ''%%tan%%'' * 逆三角関数:''%%atan%%'' (逆正接)等 * 指数関数:''%%exp%%'' * 対数関数:''%%log%%'' (自然対数) * 平方根:''%%sqrt%%'' などを使えるようになります。 また、''%%pi%%''という名前の変数に円周率の値が代入されています。 from math import * x = pi/3 print(sin(x)**2 + cos(x)**2) print(4*atan(1)) print(exp(1)) x = exp(1.234) print(log(x)) print(sqrt(2)) 1.0 3.141592653589793 2.718281828459045 1.234 1.4142135623730951 ===== クラスメソッド ===== list_name.append(element_to_add) のようにして''%%list_name%%''というリストに''%%element_to_add%%''という要素を付け加えることができました。このように変数にピリオドをつけて関数名を書くような使い方をするものをクラスメソッドと呼びます。リストデータ型には、他にもいくつかメソッドがありますが、ここではひとつだけ紹介しておきます。 squares = [1, 4, 9, 16, 25] squares.reverse() print(squares) [25, 16, 9, 4, 1] ''%%.reverse()%%''をリストにつけるとリストの要素の並びを逆にします。元のリストの中身自体が変わってしまうので注意が必要です。 ===== 少し高度な使い方 ===== ==== range関数(再) ==== ''%%range%%''関数の完全な仕様は ranng( 初期値 , 上限 , 増分 ) です。''%%初期値%%''と''%%増分%%''を省略すると''%%初期値 = 0%%'', ''%%増分 = 1%%'' が、''%%増分%%''を省略したときは''%%増分 = 1%%''が設定されます。生成される数列は''%%上限%%''に一致することも超えることもはありません。得られた数列をリストとして表示するときは''%%list%%''関数を使います。 print(list(range(10))) print(list(range(1, 10))) print(list(range(1, 10, 2))) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] [1, 2, 3, 4, 5, 6, 7, 8, 9] [1, 3, 5, 7, 9] ==== リストの内包表記 ==== ''%%for%%''文を使って整数の自乗を順にならべた squares = [0, 1, 4, 9, 16] のようなリストをつくることを考えます。これまでの知識を使って書くと以下のようになります。 squares = [] for x in range(5): squares.append(x**2) print(squares) [0, 1, 4, 9, 16] これと同じことを以下のようにして実現できます。 squares = [x**2 for x in range(5)] print(squares) [0, 1, 4, 9, 16] このような機能を「リストの内包表記」といいますが、プログラムが簡潔になるのと以下のような副作用がないので非常によく使います。 x = 100 squares = [] for x in range(5): squares.append(x**2) print(squares) print(x) # 変数xにはfor文の最後の値が代入されたまま残っている。 x = 100 squares = [x**2 for x in range(5)] print(squares) print(x) # リストの内包表記の中の変数は同じ名前の別の場所の変数に影響しない [0, 1, 4, 9, 16] 4 [0, 1, 4, 9, 16] 100 ==== フォーマット済み文字列リテラル ==== 文字列の頭に f か F を付けたものをフォーマット済み文字リテラル (短く f-string とも)呼びます。f-stringの中では、変数や数式を''%%{...}%%''の中に書くことで、そこに変数に代入されている値や計算結果を埋め込むことができます。 value = 3 print("Value =", value) print(f"Value = {value}") print(f"Value = {value ** 2}") Value = 3 Value = 3 Value = 9