【Python】競馬予想のためのif文・for文

プログラミング

 

if文を使いたいけど、わかりません…

for文で使えると便利って聞いたけど…

 

Pythonでif文・for文を使いたいけど、よく分からないなというかた向けに書いた記事です。

if文・for文の構文など基礎的な話から、競馬予想のためのWebスクレイピングでの活用方法をお伝えします。

 

 

1.if文とは

ある条件に従いものごとを処理する。これがif文です。

Excel関数のifと考え方は同じで、例えば「条件が一致するときにAという処理をする。それ以外は処理を終了する。」というように、条件ごとに処理を変えたいときに使います。

 

・Pythonにおけるブロック定義の作法

Pythonでif文や後述するfor文を書くときは、ひとつ注意しなければならないことがあります。

それは「インデントでブロックを定義する。」です。

 

Pythonでは、if以下の処理をインデント(字下げ)することで、「ここはif文の処理だよ。」とコンピューターに分かるようにする必要があります。(あくまでPythonの話です。プログラミング言語によって作法が異なります。)

 

先ほど例に挙げた「条件が一致するときにAという処理をする。それ以外は処理を終了する。」を実際に記述すると以下のようになります。

 

name = input()

if name == "Taro":
	print("こんにちは")  #if以下の処理はインデントして記述する

 

インデントせずに記述すると、エラーになるので注意しましょう。

 

 

・if文でよく使う比較演算子、ブール演算子

if文でよく使用する比較演算子とブール演算子をまとめておきます。

比較演算子は、2つの値を使用してブール値(True/False)を返します。

ブール演算子は、ブール値の組み合わせを評価し、ブール値(True/False)を返します。

 

比較演算子説明
==等しい
!=等しくない
<より小さい
>より大きい
<=以下
>=以上

 

ブール演算子説明
And二項のどちらもTrueのときTrueを返し、それ以外はFalseを返す。
OR二項のうち少なくともどちらかがTrueのときTrueを返し、どちらもFalseのときにFalseを返す。
Notブール値を反転させる。

 

 

・条件分岐の種類(else/elif else)

if文の種類としてelseとelif else があります。

それぞれ複雑な条件で分けて処理をしたいときに重宝するので、覚えておきましょう。

 

・if else

If文だけでは、条件に一致したときの処理しかしません。不一致だった場合の処理をさせたい場合に、else文を使用します。

 

例えばこんな感じです。

name = input()

if name == "Taro":
	print("こんにちは") 
else:
	print("さようなら")  #不一致(False)だったときの処理

 

 

・if elif else

if文だけでも、複数の条件で処理を分けることができますが、elif else文を使用したほうがすっきりとした記述ができます。

 

例えばこんな感じです。

name = input()

if name == "Taro":
	print("こんにちは") #if以下の処理はインデントして記述する
elif name == "Jiro":
	print(”こんにちは次郎さん”)
elif name == "Saburo":
	print(”こんにちはサブちゃん”)
else:
	print("さようなら") #不一致(False)だったときの処理

 

 

2.For文とは

ある処理を繰り返し実行(ループ処理ともいう)する。これをfor文といいます。

同じことを繰り返し人がやると面倒だったり、ヒューマンエラーが起きたりとデメリットがありますよね。コンピューターに置き換えることで単純作業から解放されるだけでなく、ミスも起こりにくく効率的になります。

for文では、まさにこのようなことが実現できるのです。

 

 

・指定した回数分を繰り返す(range関数)

処理を繰り返す回数を指定して実行する書き方です。

range関数を使って繰り返し回数を指定します。

 

一番オーソドックスな記述をしてみます。

変数iに0から4までの数字が代入され、表示されます。

for i in range(5):
	print(i)

#実行結果
0
1
2
3
4

 

 

・breakとcontinue

プログラミングをしていると、意図的に繰り返し処理から抜けたいときが出てきます。

このときにbreakを使います。

breakは、breakに到達すると即時に処理から抜けることができます。

 

また、ある条件下で処理をせずに飛ばしたいときは、continueを使用します。

continueは、continueに到達すると処理をスキップして、for文の先頭に戻り、次の処理を実行します。

 

実際の記述は以下のようになります。

変数 i が6になるとbreakで処理から抜けるので、6以降は表示されなくなります。

for i in range(10):
	if i % 2 == 1:
		continue  #奇数はスキップされ、先頭に戻ります。
		
	elif i == 6:
		break     #6に到達すると処理から抜けます。
	else:
		print(i)

#実行結果
0
2
4

 

 

・活用例

最後にWebスクレイピングでの利用シーンを考えて実用的なコードを紹介して終わりたいと思います。

 

利用シーンとしては、出馬表にある競走馬成績ページのURL取得を想定してみました。

一つ覚えておけば、応用できると思いますので参考にしてください。

 

コードはこんな感じです。

import requests
from bs4 import BeautifulSoup

url = requests.get('http://umano-ie.com/racesample/')  #出走表サンプルのWebページを取得
soup = BeautifulSoup(url.text, "html.parser")

umalist = []  #データを格納するリストを用意

for a in soup.select('td > a[href^="http://umano-ie.com/horsedata-sample"]'):  #競走馬データのリンクを指定

	urldata = a.get('href')
	umalist.append(urldata)  #データをリストに格納

print(umalist)

 

リストに競走馬8頭分のURLが格納されていれば成功です。

 

 

・まとめ

Pythonのif文とfor文ついて、説明させていただきました。

Webスクレイピングでは、条件に一致するデータを取得したり、繰り返し処理が必要な場面が多いので、これらが使えるようになるとデータ取得や整形のアプローチに幅がでるようになります。

どちらもよく使う構文なので、覚えておいて損はありません。

 

「うまのいえ」では、今後もWebスクレイピングのネタを中心にブログを更新していきます。

また、足を運んでいただけると喜びます。

 

ご清聴ありがとうございました。