KOSEN{BLOG}について

Python if文

今回時間のズレを修正するために、IF文を用いました。

なのでif文の説明をした後に実装部分を説明したいと思います。

if文とは

if文はプログラムの中で条件分岐を書きたいときに使う文です。

条件分岐は以下のような場合に、はいいいえで表すことができます。

  • この数字は5ですか? はい/いいえ
  • この数字はマイナスはですか? はい/いいえ

つまりif文は、与えられた条件が、

  • True(ここでいうはい)であるか
  • False(ここでいういいえ)であるか

はいといいえは、プログラムではTrue(1)False(0)と表します。

if文を使った条件分岐は、プログラミングそのものの基本的な考え方の一つになります。

3つのパターン

実際にif文の使い方は以下の3つのパターンがあります。

  • if文の基本
  • if else
  • if elif

if文の基本

if文の基本的な構文は以下のようになります。

if [条件式]:
	[条件式がTrueのときに行う処理]

これが基本的な形です。if文はTrueかFalseの値を持つ条件式と一緒に書きます。この条件式がTrueのときにif文の中に書かれた処理を実行します。

例として計算の結果が0以上であるかを条件式として使う。

x = 5 
if x * 2 >= 0:    
    print("+です")

実行結果

+です

条件式は論理演算子や比較演算子で計算されて、TrueかFalseを返す。

比較演算子の基本は以下の表にまとめます。

記号 比較 意味
== x == y xとyは等しい
!= x != y xとyは等しくない
> x > y xはyより大きい
>= x >= y xはy以上
< x < y xはyより小さい
<= x <= y xはy以下

if else

先程のコードは、条件式がTrueになるときのみの処理でした。

Trueのときだけでなく、条件式がFalseになったときに動く処理も書くことができます。

Falseのときの処理を書くには、elseを使います。elseを使った基本は以下です。

if [条件式]:
	[条件式がTrueのときに行う処理]
else:
	[条件式がFalseのときに行う処理]

elseは条件式を持ちません。elseの上のif文がFalseになったときだけ、実行してくれます。

例として以下を見てみます。

x = -3 
if x * 2 >= 0:
    print("+です")
else:
	print("-です")

実行結果

-です

実行結果ではif文の条件式がFalseなので、elseの「-です」と出ていますね。

そしてif文のprintは実行されず、elseのみが実行されていることがわかります。

if elif

別の条件に当てはまったらelseとは別の処理がしたいときにelifを使います。

例として以下を見てみます

if [条件式1]:
    [条件式がTrueのときに行う処理]
elif [条件式2]:
    [elifの条件式2がTrueのときに行う処理]
else:    
    [if文の条件式1もelifの条件式2もどちらもFalseのときに行う処理]

使い方はif文のときとほぼ変わらず、条件式を持ちます。

例として以下を見てみます

x  = 200 
if x == 100:    
    print('x = 100')
elif x == 200:
    print('x = 200')
elif x > 0:
    print('x = 300')
elif x == 0:
    print('x = 400')
else:
    print('条件を満たしていません')

実行結果:

x = 200

xの値は200なので、ここでは「x == 200」の条件式に一致して処理を実行しています。

elifはif文とelseに挟まれるように書きます。

自動購入Botへの実装

if文を使ってやりたいこと

時間のズレは遅れたり進んだりします。

遅れた場合にはこうする。進んでる場合はこうする。という動作を行いたい。

遅れた場合+進んだ場合-になると仮定します。
前回の記事でそのようにズレの値を出したため)

プラスマイナスの判別は以下のコードで

if t4 >= 0:

また遅れた場合に行いたいこと(処理を早くする)

  1. ズレの小数点の切り上げ
  2. 切り上げた値分早く動作
  3. 切り上げられた分sleepで待機

小数点の切り上げはmath.ceil()でできます。(import mathを忘れずに)

(また切り捨てはmath.floor()でできます。)

また進んでる場合に行いたいこと(処理を遅くする)

  1. ズレの分sleepで待機

完成のコード

前回の記事のズレの検出のコードと併せて以下になります。

import requests
from bs4 import BeautifulSoup
import time
import math

r = requests.get('https://ntp-a1.nict.go.jp/cgi-bin/jst')

soup = BeautifulSoup(r.text,'lxml')

t1 = soup.find("body").string
t2 = t1.rstrip('\n')

t3 = time.time()
t4 = float(t2)-t3
print(t2,t3,t4)

if t4 >= 0:
    t5 = 0
    t6 = math.ceil(t4)
    t7 = t4 - t6

else:
    t5 = -t4
    t6 = 0
    t7 = 0

これで出したtをそれぞれの役割の場所に配置したら終わりです。

コメントを残す

メールアドレスが公開されることはありません。