ひとり部長のひとりごと

社会人1年目で社内起業を始めたひとり部長がその経験を語ります。Mac関連もつぶやきます。映画のレビューはサブブログに移行しました。世の中の明るいニュースだけをまとめたエントリーも始めました。

【新幹線の料金表一瞬で出す!】python始めました。練習その1【追記】

https://www.python.org/static/img/python-logo@2x.png

いきなりどうした

どうも、ここ最近javascriptやらブックマークレットがどうのとか、なんやらって関係ない人にはほんっとにいらん記事バッカあげてるんですが、

pythonはじめました

なんだいきなり、pythonってなんぞやって人は、こいつの将来性にギョッとすると思います。

手始めに「新幹線の料金」

練習がてら、さくっと出してくれるプログラムを組んでみました。

import lxml
import codecs
from bs4 import BeautifulSoup
import urllib.request
q = "http://www.shinkansen.co.jp/ryoukin_tokaido_sanyo.html"
html = urllib.request.urlopen(q).read()
soup = BeautifulSoup(html, "lxml")
table = soup.find("table", {"class":"demoTable"}) 
fromStation="品川"#上り駅を入力してください
toStation="新大阪"#下り駅を入力してください
#出発駅リスト
if fromStation == "東京":
    yoko = 2
if fromStation == "品川":
    yoko = 3
if fromStation == "新横浜":
    yoko = 4
if fromStation == "名古屋":
    yoko = 5
if fromStation == "京都":
    yoko = 6
if fromStation == "新大阪":
    yoko = 7
if fromStation == "新神戸":
    yoko = 8
if fromStation == "姫路":
    yoko = 9
if fromStation == "岡山":
    yoko = 10
if fromStation == "福山":
    yoko = 11
if fromStation == "広島":
    yoko = 12
#行き先リスト
if toStation == "品川":
    tate = 1
if toStation == "新横浜":
    tate = 2
if toStation == "名古屋":
    tate = 3
if toStation == "京都":
    tate = 4
if toStation == "新大阪":
    tate = 5
if toStation == "新神戸":
    tate = 6
if toStation == "姫路":
    tate = 7
if toStation == "岡山":
    tate = 8
if toStation == "福山":
    tate = 9
if toStation == "広島":
    tate = 10
print("出発駅:"+table.findAll("th")[yoko].text+"駅")
print("到着駅:"+table.findAll("tr")[tate].th.text+"駅")
price = table.findAll("tr")[tate].findAll("td")[yoko-1].text.replace(",","")

if len(price) == 13:
    ticket = int(price[0:5])
    seat = int(price[5:9])
    none_seat = int(price[9:13])
    print("運賃:"+str(ticket)+"円")
    print("指定席:"+str(seat)+"円(合計:"+str(ticket+seat)+"円)")
    print("自由席:"+str(none_seat)+"円(合計:"+str(ticket+none_seat)+"円)")
if len(price) == 12:
    ticket = int(price[0:4])
    seat = int(price[4:8])
    none_seat = int(price[8:12])
    print("運賃:"+str(ticket)+"円")
    print("指定席:"+str(seat)+"円(合計:"+str(ticket+seat)+"円)")
    print("自由席:"+str(none_seat)+"円(合計:"+str(ticket+none_seat)+"円)")
if len(price) == 11:
    ticket = int(price[0:3])
    seat = int(price[3:7])
    none_seat = int(price[7:11])
    print("運賃:"+str(ticket)+"円")
    print("指定席:"+str(seat)+"円(合計:"+str(ticket+seat)+"円)")
    print("自由席:"+str(none_seat)+"円(合計:"+str(ticket+none_seat)+"円)")
if len(price) == 10:
    ticket = int(price[0:3])
    seat = int(price[3:7])
    none_seat = int(price[7:10])
    print("運賃:"+str(ticket)+"円")
    print("指定席:"+str(seat)+"円(合計:"+str(ticket+seat)+"円)")
    print("自由席:"+str(none_seat)+"円(合計:"+str(ticket+none_seat)+"円)")

こいつを実行すると、こうなります。

出発駅:品川駅
到着駅:新大阪駅
運賃:8750円
指定席:5700円(合計:14450円)
自由席:4870円(合計:13620円)

広島までしか登録してないけどwww

理屈

こちらの「情報新幹線」さんのテーブルから情報を頂いています。 http://www.shinkansen.co.jp/ryoukin_tokaido_sanyo.html

実行環境

python3で書いてます。

使いかたとか、pythonってどうやんねんみたいなことはおいおい僕も知識がついてから、、、説明します・・・。 まだぜんぜんよくわかってないので。

では

追記

inputを知ったので、実行時に入力できるようにしました

import lxml
import codecs
from bs4 import BeautifulSoup
import urllib.request
q = "http://www.shinkansen.co.jp/ryoukin_tokaido_sanyo.html"
html = urllib.request.urlopen(q).read()
soup = BeautifulSoup(html, "lxml")
table = soup.find("table", {"class":"demoTable"}) 
fromStation =input("上り駅:")#
toStation = input('下り駅:')#
#出発駅リスト
if fromStation == "東京":
    yoko = 2
if fromStation == "品川":
    yoko = 3
if fromStation == "新横浜":
    yoko = 4
if fromStation == "名古屋":
    yoko = 5
if fromStation == "京都":
    yoko = 6
if fromStation == "新大阪":
    yoko = 7
if fromStation == "新神戸":
    yoko = 8
if fromStation == "姫路":
    yoko = 9
if fromStation == "岡山":
    yoko = 10
if fromStation == "福山":
    yoko = 11
if fromStation == "広島":
    yoko = 12
#行き先リスト
if toStation == "品川":
    tate = 1
elif toStation == "新横浜":
    tate = 2
elif toStation == "名古屋":
    tate = 3
elif toStation == "京都":
    tate = 4
elif toStation == "新大阪":
    tate = 5
elif toStation == "新神戸":
    tate = 6
elif toStation == "姫路":
    tate = 7
elif toStation == "岡山":
    tate = 8
elif toStation == "福山":
    tate = 9
elif toStation == "広島":
    tate = 10
else:
    yoko = "none_type"
    if yoko == "none_type":
        print("行き先を指定してください")
if yoko != "nonetype":
    price = table.findAll("tr")[tate].findAll("td")[yoko-1].text.replace(",","")

    if len(price) == 13:
        ticket = int(price[0:5])
        seat = int(price[5:9])
        none_seat = int(price[9:13])
        print("運賃:"+str(ticket)+"円")
        print("指定席:"+str(seat)+"円(合計:"+str(ticket+seat)+"円)")
        print("自由席:"+str(none_seat)+"円(合計:"+str(ticket+none_seat)+"円)")
    if len(price) == 12:
        ticket = int(price[0:4])
        seat = int(price[4:8])
        none_seat = int(price[8:12])
        print("運賃:"+str(ticket)+"円")
        print("指定席:"+str(seat)+"円(合計:"+str(ticket+seat)+"円)")
        print("自由席:"+str(none_seat)+"円(合計:"+str(ticket+none_seat)+"円)")
    if len(price) == 11:
        ticket = int(price[0:3])
        seat = int(price[3:7])
        none_seat = int(price[7:11])
        print("運賃:"+str(ticket)+"円")
        print("指定席:"+str(seat)+"円(合計:"+str(ticket+seat)+"円)")
        print("自由席:"+str(none_seat)+"円(合計:"+str(ticket+none_seat)+"円)")
    if len(price) == 10:
        ticket = int(price[0:3])
        seat = int(price[3:7])
        none_seat = int(price[7:10])
        print("運賃:"+str(ticket)+"円")
        print("指定席:"+str(seat)+"円(合計:"+str(ticket+seat)+"円)")
        print("自由席:"+str(none_seat)+"円(合計:"+str(ticket+none_seat)+"円)")

課題は、エラー表示をなくすことと、 if文半分にできるんじゃね?って所。

また追記します。