debian の初期設定
debian jessieをGUIインストール直後にやったこと。
apt-transport-https のインストール
http://ftp.jp.debian.org/debian/pool/main/a/apt/apt-transport-https_1.0.9.8.4_amd64.deb dpkg -i apt-transport-https_1.0.9.8.4_amd64.deb
vimのインストール
vi /etc/apt/sources.list deb http://security.debian.org/debian-security jessie/updates main apt-get update
mozcのインストール(日本語環境)
vi /etc/apt/sources.list deb http://ftp.de.debian.org/debian jessie main aptitude -y install fcitx-mozc reboot
https://packages.debian.org/ja/jessie/amd64/fcitx-mozc/download
Microsoft Visual Studio Code のインストール
dpkg -i code_1.10.2-1488981323_amd64.deb
Google Chrome のインストール
aptitude -y install libappindicator1 dpkg -i google-chrome-stable_current_amd64.deb
02_数値型を操作する
- Pythonでは数値もオブジェクトであり、メソッドを持っています。
- 数値のメソッドを呼び出すことはほとんどありません。
- 16進数の表記
- 先頭に「0」をつける
- そのあとに「x」を記述する
- 0から9、a〜fまで
- 16進数は、数値型
- hex()
- 16進数相当の文字列を得る
- int()
- 16進数相当の文字列を数値に変換する
- 第2引数に、基数として「16」を渡す。
- 2進数の表記
- 先頭に「0」をつける
- そのあとに「b」を記述する
- 0か1
- bin()
- 10進数の数値を2進数相当の文字列に変換する
- int()
- 基数は「2」を渡す
- bin()
- 8進数の表記
- 先頭に「0」をつける
- そのあとに「o」を記述する
- 0から7までの数値を続ける
- oct()
- 数値を8進数相当の文字列に変換するため
- int()
- 基数は,8
- oct()
- ビット演算子
# coding: utf-8 # In[1]: # 16進数のリテラルを入力 0x1ff # In[2]: # 10進数の数値を16進数相当の文字列に変換 hex(1023) # In[3]: # 16進数相当の文字列を数値に変換する int("0x100", 16) # In[4]: # 2進数のリテラルを入力 0b1000 # In[5]: # 10進数の数値を2進数相当の文字列に変換する bin(1023) # In[6]: # 2進数相当の文字列を数値に変換 int("0b1111111111", 2) # In[7]: # 8進数のリテラルを入力 0o1777 # In[10]: # 10進数の数値を8進数相当の文字列に変換 oct(1023) # In[11]: # 8進数相当の文字列を数値に変換する int("0o1777",8) # In[ ]:
01_オブジェクトとしての組込型
- メソッドとは
- データに紐づいて、データに対する処理や操作をする関数のことを言う。
- メソッドの呼び出しの記法
- データ.メソッド名(引数1, 引数2, …)
- set型とディクショナリ型(変更不可能なデータのコレクション型)
- set型、ディクショナリ型はともに、複数の要素を順番なしに保存することができるデータ型。
- 変更不可能
リストで使える演算子、関数、メソッド
- 演算子や関数
- +
- *
- sum()
- len()
- max()
- min()
- メソッド
- index()
- reverse()
- sport()
- pop()
- remove()
- append()
- extend()
メソッド | 解説 |
---|---|
count() | ある要素がリストにいくつ含まれているか数える |
reverse() | リスト要素の順番を逆にする |
sort() | リスト要素をならべかえる |
06_関数の応用
- 関数にデフォルトの引数を定義する
- 引数のキーワード指定
- 引数はカンマで区切って、複数指定できる
- 順番には大事な意味がある。
- データの種類(データの型)
- あえて順番を入れ替えて呼び出す方法がある。
- 関数に引数を渡す時、引数の名前を明示する。
- 1つだけデフォルト値以外の引数を指定したいときに、キーワード指定を使うことがある。
- 関数とローカル変数
- 関数の中と外で同盟の変数を定義すると、別の変数として扱われる
- 関数内からは外の変数が見えるが、外から中は見えない
- 関数内世界のような機能を、「名前空間」や「ネームスペース」と呼ぶことがある
# coding: utf-8 # In[4]: # 関数にデフォルト引数を定義する def fizzbuzz(count=100, fizzmod=3, buzzmod=5): for cnt in range(1, count+1): if cnt%fizzmod == 0 and cnt%buzzmod == 0: print("FizzBuzz") elif cnt%fizzmod == 0: print("Fizz") elif cnt%buzzmod == 0: print("Buzz") else : print(cnt) fizzbuzz() # In[5]: # 引数のキーワード指定 ## class int(x, base=10) ## https://docs.python.jp/3/library/functions.html#int int(base=2, x="1010") # In[6]: # 関数の外側で定義した変数を関数内で使う local_var = 1 def test_func(an_arg): local_var = an_arg print("test_func()の中", local_var) test_func(200) print("test_func()の外", local_var) # In[ ]:
05_ループの応用
- whileでループを作る
- ループにシーケンスを添えないこと。
- 繰り返し変数もない
- 条件式を添える
- continue文を使う
- それ以降のループブロックを実行せず、ブロックの最初まで戻ることができる。
- 特定の条件にあるとき、ブロックの一部を実行せず、ループを続けたいときに使うと便利です。
- ループのelse
- for文にelseを添えると、ループの実行が終わった後に実行されるブロックを定義できる。
- for文のブロックでbreak文が実行されたときは、else以降のブロックは実行されない。
while文の記法
while 条件式: ループ内で実行するブロック
# coding: utf-8 # In[3]: ### FizzBuzz問題を解くプログラム cnt = 1 while cnt <= 100: if cnt % 3 == 0 and cnt % 5 == 0: print("FizzBuzz") elif cnt % 3 == 0: print("Fizz") elif cnt % 5 == 0: print("Buzz") else: print(cnt) cnt = cnt + 1 # In[14]: ### じゃんけんプログラム from random import randint # ディクショナリの定義をする hands = {0:"グー", 1:"チョキ", 2:"パー",} # タプル をキーに使いディクショナリに設定する # 勝ち負けのルール rules= {(0,0):"あいこ" , (0,1):"勝ち" , (0,2):"負け", (1,0):"負け" , (1,1):"あいこ" , (1,2):"勝ち", (2,0):"勝ち" , (2,1):"負け" , (2,2):"あいこ"} while True: pc_hand = randint(0,2) user_hand_str = input("0:グー, 1:チョキ, 2:パー, 3:やめる") # じゃんけんをやめる if user_hand_str == "3": break # 不正な入力の場合、ループの先頭に戻る if user_hand_str not in ("0", "1", "2"): continue # ユーザーの手を数値に変換 user_hand = int(user_hand_str) print("あなた" + hands[user_hand]+ "、コンピュータ:" + hands[pc_hand]) print(rules[user_hand, pc_hand]) # In[23]: ### for文とelse文の組み合わせ (素数です) a_num = 59 for num in range(2, a_num): print(a_num, num) if a_num % num == 0: print(a_num, "は素数ではありません") break else: print(a_num, "は素数です") # In[22]: ### for文とelse文の組み合わせ(素数ではありません。) a_num = 60 for num in range(2, a_num): print(a_num, num) if a_num % num == 0: print(a_num, "は素数ではありません") break else: print(a_num, "は素数です") # In[ ]:
04_if文の応用
- 比較演算子
- ==
- !=
- >
- <
- >=
- \<=
- in
- 条件式は、True,Falseという2種類の値を返す。真偽値
- 違うデータ型の比較を行うことはできない。
- “100” > 200 のような比較を書いて、自動的に文字列を数値に変換してくれない。
- int(“100”) > 200 のように、明示的に変換する必要がある
- 論理演算
- and
- or
- not
# coding: utf-8 # In[1]: 1+1 == 2 # In[6]: # 5の0乗 + 9 = 10 5**(4-4)+9 == 10 # In[7]: 5 > 2 # In[8]: 100 == 100.0 # In[9]: "かなこ" != "かなこぉ↑↑" # In[10]: [1, 2, 3] == [1, 2, 3] # In[14]: ### 条件式に論理演算子を使った例 v = 30000 if v < 28400: print("地上に落下します") if v > 28400 and v < 40300: # print("月とお友達です") if v > 40300 and v < 60100: print("惑星の仲間入りです") if v == 60100: print("アルファケンタウリを目指せ") # In[15]: # In[ ]:
03_タプルを使う
- タプルは、リストにとてもよく似た性質をもっている。
- タプルは、要素を変更できないシーケンス
- 複数の要素をもつことができる
- インデックスを使って要素にアクセスできる。
- 要素の変更ができない。
- タプルの定義方法
- (要素, 要素, …)
- タプルから要素を取り出す
- タプル名[インデックス]
- タプルは要素を変更することができない
- TypeError: ‘tuple’ object does not support item assignment が発生する
- タプルは、要素を削除することができない。(変更されることになる)
- タプル同士を連結することができる
- +演算子を使う
- タプルもリストと同じように、len(),in演算子,スライスを使える。
- 要素が1つだけのタプルを定義するには、少しコツが必要。
- 「(10,)」のように、要素の後にカンマを補う必要がある。
- タプルの利点
- ディクショナリのキーや、setの要素にすることができる。
補足
- 2点間の距離の求め方
- 緯度と経度の差を二乗して足す
# coding: utf-8 # In[1]: ### タプルの定義 month_names = ('January', 'February', 'March', 'April', 'May', 'June', 'July') month_names # In[2]: ### タプルから要素を取り出す month_names[1] # In[3]: ### タプルの要素を変更する month_names[0] = '睦月' # In[4]: ### タプル同士の連結 ### month_names2 = month_names + ('August', 'September', 'October', 'November', 'December') month_names2[11] # In[5]: ### タプルをキーとしたディクショなりの作成 pref_capitals = {(43.06417, 141.34694):"北海道(札幌)", (40.82444, 140.74): "青森県(青森市)", (39.70361, 141.1525):"岩手県(盛岡市)"} pref_capitals # In[11]: ### 指定した緯度、経度に合致する県庁所在地を調べる loc = (39.70361, 141.1525) for key in pref_capitals: if loc == key: print(pref_capitals[key]) break # In[19]: ### 指定した緯度、経度に最も近い県庁所在地を調べる # 調べたい地点の緯度、経度 loc = (41.768793, 140.72881) # 最寄りの県庁所在地を保存する変数 nearest_cap = '' # 最寄りの地点までの距離を保存する変数 nearest_dist = 10000 # keyでループする for key in pref_capitals: dist = (loc[0]-key[0])**2+(loc[1]-key[1])**2 print(key, pref_capitals[key]) if nearest_dist > dist: # より近い地点が見つかったので、入れ替える。 nearest_dist = dist nearest_cap = pref_capitals[key] print(nearest_cap) # In[22]: aaa = (555,333,333) aaa # In[ ]: