🐥

Python入門 (備忘録として)

2020/11/15に公開

非エンジニアがPythonを勉強した記録です.

教科書にしたもの

『スッキリわかるPython入門』インプレス社 2019年初版
基本的なことが短期間でわかる.説明も丁寧で既出用語の参照先ページが書かれてるのも良い.

Anacondaのインストール方法
windowsとmacどちらのインストール手順もキャプチャ付きで説明されてる.とても分かりやすい ※AnacondaとはPython本体や下記JupyterLabを含むIDE(総合開発環境)

JupyterLab使い方
Anaconda navigaterから開ける.コードが書けて-実行できて-保存出来る.ブラウザ上で起動するのでとても簡単

1.素材

Pythonプログラムは次の素材で書ける

  1. 演算子
  2. 変数
  3. コレクション
  4. 関数

演算子(operand)

コンピュータに計算させるための記号の事

演算子 説明 例の結果
+ 足し算
- 引き算
* 掛け算
/ 割り算
// 割り算の商 7//4 1
% 割り算の余り 7%4 3
** 累乗 2**3 8
= 代入演算子 x=10 変数xに10が入る

変数(variable)

データを入れる箱

  • 型の種類 :箱の中に入るモノ(要素)によって型は4種類ある
要素
int 整数 1、 20、 300
float 少数 3.14、 -3.14
str 文字列 "Hi"、 'やあ' ※""か''で囲む
bool 真偽値 True , False  ※2種類だけ
  • 型の作り方・入れ方
x=int()

解説:xという変数をつくる.ついでにint型の指定をする

x=10

解説:xという変数に10を代入する. ※'='は左右等しいを示すのでなく、右の値を左へ代入している

y=x

解説:xという変数の中身(この場合10)をyに代入する

コレクション(collection)

変数の一種で、データを入れる箱が連続したもの

  • コレクションの種類 :4種類あり特徴がある。種類は()や{}の記述の仕方で指定する
種類 要素 記述例 追加の仕方 特徴
list 複数の値 z=[1,2] z.append(3) よく使う. appendではリスト最後尾に追加される
dictionary 複数のキーと値のペア z={'A':1,'B':2} z['C']=3 ペアで設定できるので順番を気にしなくていい
tuple 複数の値 z=(0,1,2) 不可 値の変更が出来ない
set 複数の値 z={1,2} z.add(3) 重複した値は入れられない
※記述例はzというコレクションを作る場合
  • 型の作り方・入れ方
z=list[10,20]

解説:zというlistをつくる.ついでに1番目に10を、2番目に20を代入

z.append[30]

解説:zというlistの最後尾に30を代入

z[1]=[200]

解説:zというlistの2番目に200を代入. ※1はlistのインデックスを指し、インデックスは0から始まるので1番目が[0]、2番目が[1]となる

この結果、zというlistは次のようになる z=[10,200,30]

インデックス 要素 --
0 10
1 200 最初に20だったが上記2行目で200が代入された。元の値20は消える
2 30
  • dictionaryの構造
    dictionaryは他のと違って要素とキーがペアで保持されてる

例えば
z={'北海道':1000,'東京':2000,'沖縄':3000} のdictionaryは次のようになってる

インデックス キー 要素
0 '北海道' 1000
1 '東京' 2000
2 '沖縄' 3000

これに

z['東京']=5000 

解説:zというdictionaryのなかの、キーが'東京'を呼び出して要素に5000を代入。元の値は消える
とすると

インデックス キー 要素
0 '北海道' 1000
1 '東京' 5000
2 '沖縄' 3000
となる. ※もしかするとdictionaryにはインデックスは無いかも…

関数(function)

変数を操作したり表示したりいろいろできる

  • よく使われる関数
関数名 引数 使い方の例 例の結果≒戻り値
print print('Hello') Hello と画面に表示する
fomat '{}月{}日'.format(10,15) 10月15日 という要素になる
input キー入力 input() キー入力された値が 要素になる
sum 複数の数値 sum(2,3) 5
list リストにしたい複数の要素 list(1,2,3) [1,2,3]
  • 関数の作り方
    関数は用意されたもの以外に、自分のオリジナルでも作れる
    例えば、ある値をn乗するsugoi関数を作ってみる
def sugoi(x,n):
    z=x**n
    return z

解説:これから関数名「sugoi」を定義(define)する。2つの引数を受け取りそれを、xとnに順番で代入→xのn乗の計算→結果をzに代入→それを戻り値として、本文に戻す。
これを使ってみると

a=sugoi(2,2)
print(a)
print(sugoi(3,3)) 

2行目と3行目でそれぞれsugoi関数を使っている。実行結果は

4
27

となる。カッコいい!

2.構文(syntax)

Pythonはコードを上から順次実行していくのが基本だが下記の2構文は異なる.

  1. 条件分岐
  2. 繰り返し

条件分岐(conditional branch)

条件によって処理を振り分ける

  • 比較演算子 :これをつかって、左右の値を比べる
演算子 意味
== 同じ
!= 等しくない
>
< 未満
>= 以上
<= 以下
これらの比較の結果、あてはまる時はTrueになり、そうじゃない時はFalseになる.
例えば、
if x == y: 
 処理1
elif x == z:
 処理2
else
 処理3

解説:もしx==yなら処理1.その後ifブロックからexit. 同じじゃないなら次へ.
 次、もしx==zなら処理2.その後ifブロックからexit. 同じじゃないなら次へ.
 次、上記2に該当しないものは必ず処理3.

※インデント(左端からの半角スペースの数)で構文の意味が全く変わるので要注意.
※ifやelseの後の「 : 」を忘れがち.これらは次項の繰り返し構文でも同じ.

繰り返し(iterate)

特定の条件の間、繰り返し処理を行う

  • while :ある条件の間は処理を繰り返す
count=0
while count < 3
  count = count+1
  print('やあ!')

解説:変数countに0を代入し、count変数が3未満の間は処理を繰り返す.処理内容はcount変数に1を加算し、やあ!と表示.
※ここでのcount=count+1 は count+=1 と書いても同じ.こっちの方がよく使われる.
これを実行すると

やあ!
やあ!
やあ!

となる.
while構文でよく使われるのがリストの長さを返すlen関数.
次に、listxという3要素を持つリストを作り、len関数の動きを確認してみる.

listx=[2,6,4]
print(len(listx))   

これを実行すると

3

となる.
これを使って、最初のコードの2行目をwhile count < len(リスト名)とすると、リストの要素の数だけ繰り返し処理をすることが出来る.

  • for :所定の回数、処理を繰り返す
    for構文を使うとより簡単にリストの繰り返し処理が出来る.
listx=[2,6,4]
for n in listx:
 print(n)

解説:listxに3つの要素を代入.インデックスの[0]から順に要素そのものを変数nに代入. nの要素を繰り返し表示.これを実行すると

2
6
4

となる
for構文でよく使われるのが特定の長さのリストを作るrange関数.
次にrange関数の動きを確認してみる.

listx=range(3)
for n in listx:
 print(n)
0
1
2

ここからlistx=range(3) は listx=[0,1,2] と同じだとわかる.

▲オブジェクト(object)(※未完成)

オブジェクトとは、データ(属性attribute)とデータ処理の関数(メソッド)をもった何かで、クラスによって生み出される

▲identify(※未完成)

参照されるのはオブジェクト自体でなく(id)idebtityのほうで、idは型によって不変と可変がある、と。

▲モジュール(module)(※未完成)

・モジュールとは:関数のまとまりのこと 例:標準ライブラリ>httpパッケージ>serverモジュール>HTTPServer関数 っていう階層構造

JupterLabで実行

P.317のコードを実行してみた。最初、インデント間違えてwhile構文が動かなかった等のポイントを下記Twitter画像に記載

from random import randint
print('数当てゲームを始める。3桁の数を当てて')

answer=list()
for n in range(3):
    answer.append(randint(0,9))

is_continue=True
while is_continue==True:
    prediction=list()
    for n in range(3):
        data=int(input('{}桁目の予想入力(0~9)>>'.format(n+1)))
        prediction.append(data)
        
    hit=0
    blow=0
    for n in range(3):
        if prediction[n]==answer[n]:
            hit+=1
        else:
            for m in range(3):
                if prediction[n]==answer[m]and n!=m:
                    blow+=1
    
    print('{}ヒット!{}ブロー'.format(hit,blow))
    if hit==3:
        print('正解!')
        is_continue=False
    else:
        if int(input('続ける?1:はい 2:終わる>>'))==2:
            print('正解は{}{}{}だ'.format(answer[0],answer[1],answer[2]))
            is_continue=False
print('おわり')

用語集 (日本語/English)

  • プログラミング用語
日本語 英語 特記
変数 variable
代入 assign
宣言 declare
コレクション colection
要素 ellement
関数 function
定義 define
引数 argument PythonRhinoSctipt では parameter と表現されてる
戻り値 return value
呼出し call
参照 refar
分岐 branch
繰り返し iterate loopingとも
構文 syntax
( ) Round bracket
[ ] Square bracket
- Dash
~ Tilde
予約語 reserved word

Discussion