Pythonプログラミング勉強会 サンプルコード

勉強会で使ったコードです。

コピペして実行できます。

第1回

Macでのインストール

$ xcode-select --install
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)„
$ brew install pyenv
$ pyenv install 3.6.3

# ERROR: The Python ssl extension was not compiled. Missing the OpenSSL lib?
# と言われ、pyenvのインストールに失敗した場合は以下の3行をコピペ
$ CFLAGS="-I$(brew --prefix openssl)/include" \
LDFLAGS="-L$(brew --prefix openssl)/lib" \
pyenv install -v 3.6.3

$ echo 'PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
$ source ~/.bash_profile
$ pyenv global 3.6.3
$ pyenv rehash

# $ python -V と打って Python 3.6.3 と返ってくれば成功

Ubuntuでのインストール

$ sudo apt-get update
 
# Git がない場合、
$ sudo apt-get install git
 
$ sudo apt-get install buildessential libncursesw5-dev libgdbmdev libc6-dev zlib1g-dev libsqlite3-dev tk-dev libssl-dev openssl libbz2-dev libreadline-dev
$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.profile
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.profile
$ echo 'eval "$(pyenv init -)"' >> ~/.profile
$ source ~/.profile
$ pyenv install 3.6.3
$ pyenv global 3.6.3
$ pyenv rehash

# $ python -V と打って Python 3.6.3 と返ってくれば成功

第2回

やってみよう1 (じゃんけんゲーム)

a = input()     # 2人の出す手を受け取ります
b = input()

if(a == "G"):   # aの出す手で場合分け
    if(b == "G"):   # さらにbの出す手で場合分け
        print("DRAW!")
    elif(b == "C"):
        print("A WIN!")
    elif(b == "P"):    # ここでelseを使うと, G, C, P以外の入力はすべてPになってしまいます
        print("B WIN!")
elif(a == "C"):
    if(b == "G"):
        print("B WIN!")
    elif(b == "C"):
        print("DRAW!")
    elif(b == "P"):
        print("A WIN!")
elif(a == "P"):
    if(b == "G"):
        print("A WIN!")
    elif(b == "C"):
        print("B WIN!")
    elif(b == "P"):
        print("DRAW!")

 

やってみよう2 (Fizzbuzz)

for i in range(1, 101):     # iはループで1から100まで動きます
    # 先に「かつ」の場合を調べる必要があります
    if(i%3 == 0 and i%5 == 0):  # iが3と5で割り切れる
        print("Fizzbuzz")
    if(i%3 == 0):
        print("Fizz")
    if(i%5 == 0):
        print("buzz")
    else:   # どれでも割り切れない
        print(i)

 

第3回

やってみよう1~3

def TriangleArea(x1, y1, x2, y2, x3, y3):
    S = (1/2) * abs((x1 - x3)*(y2 - y3) - (x2 - x3)*(y1 - y3))
    return S


Points = [(5, 7, 3, 4, 1, 2),
          (3, 1, 4, 1, 5, 9),
          (2, 6, 5, 3, 5, 8),
          (9, 7, 9, 3, 2, 3)]

S = []
for P in Points:
    S.append(TriangleArea(P[0], P[1], P[2], P[3], P[4], P[5]))
print(S)

 

第4回

やってみよう (Triangle.py)

import matplotlib.pyplot as plt


fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)


def SetGraphGrid():
    ax.set_xlim(-5, 5)  # -5<=x<=5 の範囲に設定
    ax.set_ylim(-5, 5)  # -5<=y<=5 の範囲に設定
    ax.set_aspect('equal')  # 目盛りを揃える
    ax.grid()   # グリッドを表示


def CalcTriangleArea(x, y):  # 引数をlist2つにします
    S = (1/2) * abs((x[0] - x[2])*(y[1] - y[2]) - (x[1] - x[2])*(y[0] - y[2]))
    return S

# 質問への回答を受け取る変数 書いておかないとWhile文に入る際にエラーになります
answer = "y"

SetGraphGrid()
while(answer[0] == "y"):
    x = []
    y = []
    # 入力の受け取り
    for i in range(3):
        a = float(input())
        b = float(input())
        x.append(a)
        y.append(b)

    # 折れ線を三角形としてプロットするために x,yの末尾にx1, y1(始点)を追加
    x.append(x[0])
    y.append(y[0])

    ax.plot(x, y)

    print(CalcTriangleArea(x, y))
    print("続けますか?")
    answer = input()

plt.show()    # グラフを描画

 

Webスクレイピング 体験コード(第5回で解説)

import bs4
import urllib.request


html = urllib.request.urlopen("http://www.jma.go.jp/jp/yoho/312.html")
bsObj = bs4.BeautifulSoup(html, "html.parser")

# 天気予報が入っているtableであるforecastから情報を取り出します
table = bsObj.findAll("table", {"class": "forecast"})[0]
rows = table.findAll("tr")

for row in rows:
    ls = []
    for cell in row.findAll(['td', 'th']):
        text = cell.get_text()
        # 改行コードやタブの削除
        text = text.replace('\n', '')
        text = text.replace('\u3000', '')
        text = text.replace('\t', '')
        text = text.replace('\xa0', '')
        if(text):
            ls.append(text)
    print(ls)

 

第5回

Tweepyを用いてTweetする(要Twitter APIキー)

import tweepy

# ##### は各自のものに書き換えてください
consumer_key = "#####"
consumer_secret = "#####"
token = "#####"
token_secret = "#####"

def Twitter_OAuth():
    auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
    auth.set_access_token(token, token_secret)
    return auth

# 認証情報を照合し、APIを利用可能にする
Twitter_api = tweepy.API(Twitter_OAuth())

# 文字列 test をTweetする関数
# (Twitter_apiのアトリビュート)
Twitter_api.update_status(status="test")

テスト用Consumer KeyとAccess Token

アカウントはこちら

consumer_key="1ICAiewJepbOPUR0iIpkzn46x"
consumer_secret="qMG2FQqLKCBD2jmVtjgrAeyaTcmV8ZfpXcEb2gtRtXi2q69oPE"
token = "941246397617127425-ghoDNk839fsKJWHcWJFN5n8ED9zcsQH"
token_secret = "lWJLxEIC5rXSCmyANjjrOOABsHjg4XJNUxacxXA0mfdIR"

やってみようの解答

import bs4
import urllib.request
import tweepy

html = urllib.request.urlopen("http://www.jma.go.jp/jp/yoho/312.html")
bsObj = bs4.BeautifulSoup(html, "html.parser")
table = bsObj.find_all("table", class_="forecast")[0]
rows = table.find_all("tr")

datalist = []       # 使えそうなデータが入ったlist
# このあたりの解説は第5回資料を参照
for row in rows:
    ls = []
    for cell in row.find_all(['td', 'th']):
        text = cell.get_text()
        # 改行コードやタブの削除
        text = text.replace('\n', '')
        text = text.replace('\u3000', '')
        text = text.replace('\t', '')
        text = text.replace('\xa0', '')
        if(text):
            ls.append(text)
    if(ls):
        datalist.append(ls) # listの中にlistが入る
# 使いたいデータのインデックスを知りたい場合は、enumerateです
# for i, l in enumerate(datalist):
#     print(i, l)

tweet_text = "明日の仙台市東部の天気:{0}\n最高気温:{1}\n最低気温:{2}".format(datalist[6][1], datalist[6][16], datalist[6][15])


# ##### は各自のものに書き換えてください
consumer_key = "#####"
consumer_secret = "#####"
token = "#####"
token_secret = "#####"


def Twitter_OAuth():
    auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
    auth.set_access_token(token, token_secret)
    return auth


# 認証情報を照合し、APIを利用可能にする
Twitter_api = tweepy.API(Twitter_OAuth())

# 文字列 test をTweetする関数
# (Twitter_apiのアトリビュート)
Twitter_api.update_status(status=tweet_text)

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です