ゆずまの○○日記がシンプルでいいと思います!

プログラミングを中心に書いていこうと思ってます。

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」を渡す
  • 8進数の表記
  • 先頭に「0」をつける
  • そのあとに「o」を記述する
  • 0から7までの数値を続ける
    • oct()
      • 数値を8進数相当の文字列に変換するため
    • int()
      • 基数は,8
  • ビット演算子
# 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[ ]: