基本
if aaa == bbb:
print(1)
elif aaa == ccc:
print(2)
else:
print(3)内部の処理はインデントを設けます。このインデントがズレるとエラーになります。インデントは幾つでもいいのですが、一般的にスペース4つとされていますので、それに合わせましょう。
一行にまとめる方法
変数 = 値1 if 条件式 else 値2
上記のように記載すると条件式が正の場合は値1に、否の場合は値2になります。
ちょっとしたことですが、行数を減らせて、且つ見やすくなります。
for action in ["BUY", "SELL"]:
profit = "SELL" if action == "BUY" else "BUY"
print(profit)
# SELL
# BUY複数条件
if aaa <= bbb and aaa == ccc:
print(1)
# カッコをつける
if (aaa <= bbb and aaa == ccc):
print(1)
# 複数行
if (
aaa <= bbb and
aaa == ccc
):
print(1)演算子
| 演算子 | 結果 |
|---|---|
| x < y | xがyより小さければ、True |
| x <= y | xがyより小さいか等しければ、True |
| x > y | xがyより大きければ、True |
| x >= y | xがyより大きいか等しければ、True |
| x == y | xとyの値が等しければ、True |
| x != y | xとyの値が等しくなければ、True |
| x is y | xとyが同じオブジェクトであれば、True |
| x is not y | xとyが同じオブジェクトでなければ、True |
| x in y | xがyに含まれていれば、True |
| x not in y | xがyに含まれていなければ、True |
ノットイコールは<>ではなく!=となる。
is not と not in の順序を混同するので注意する。
Noneか
Noneの判断は以下になります。
==またはis!=またはis not
aaa = None
if aaa == None:
print(True)
else:
print(False)
# True
if aaa is None:
print(True)
else:
print(False)
# True
if aaa != None:
print(True)
else:
print(False)
# False
if aaa is not None:
print(True)
else:
print(False)
# Falsenanか
csvの読み込みなどで発生するnanの判断方法は以下の2種類のライブラリで対応が可能です。
どちらも.isnan()になります。
その他の0やNoneは以下を参照してください。
空の値(0, None, nan
numpyを使う場合
np.isnan()
import numpy as np
num = np.nan
if np.isnan(num):
print (True)
# Truemathを使う場合
math.isnan()
import math
num = math.nan
if math.isnan(num):
print (True)
# True変数の型の判別
if type(変数) is 型名とします。
# 整数
aaa = 1
print(type(aaa))
# <class 'int'>
print(type(aaa) is int)
# True
# 浮動小数点
aaa = 1.0
print(type(aaa))
# <class 'float'>
print(type(aaa) is float)
# True
# 文字列
aaa = "1"
print(type(aaa))
# <class 'str'>
print(type(aaa) is str)
# True
# 真偽値型
aaa = True
print(type(aaa))
# <class 'bool'>
print(type(aaa) is bool)
# True
# クラス
class bbb():
pass
aaa = bbb()
print(type(aaa))
# <class '__main__.bbb'>
print(type(aaa) is bbb)
# True日付
typeを使って、datetime.datetimeと比較します。
import datetime
now = datetime.datetime.now()
print(now)
# 2021-01-22 15:20:14.472420
if type(now) == datetime.datetime:
print(True)
else:
print(False)
# True
now = now.strftime('%Y-%m-%d %H:%M:%S%z') # 文字列に変換
if type(now) == datetime.datetime:
print(True)
else:
print(False)
# False
同じオブジェクトか(is、is not
data = None
if data is None:
print("YES")
if data is not None:
print("YES")
if data == None: # エラーになることがある
print("YES")含まれているか(in、not in
変数
# 含まれているか?
if 'bbb' in 'aaa-bbb-ccc':
print("YES")
# 含まれていないか?
if 'bbb' not in 'aaa-bbb-ccc':
print("YES")
リスト型、タプル型、辞書型
# リスト型(list)
data = ["Tokyo", "Osaka", "Kyoto"]
if "Tokyo" in data:
print("YES")
# タプル型
data = ("Tokyo", "Osaka", "Kyoto")
if "Tokyo" in data:
print("YES")
# 辞書型 (連想配列、dict)
# キーの有無
data = {"Tokyo":1, "Osaka":2, "Kyoto":3}
if "Tokyo" in data:
print("YES")
# 値の有無
if 1 in data.values():
print("YES")辞書型の値の有無は、data.values()とする。
これを応用して、実行確認の処理に使えます。
choose = input("実行しますか? 'y' or 'n':")
if choose in ['y', 'Y', 'ye', 'yes']:
print('実行する')
elif choice in ['n', 'N', 'no']:
print('実行しない')前方一致、後方一致
data = "aaa-bbb-ccc"
# 前方一致
if data.startswith("aaa"):
print("YES")
# 前方のいずれかの文字列に一致
if data.startswith(('aaa', 'bbb', 'ccc')):
print("YES")
# 後方一致
if data.endswith('ccc'):
print("YES")
# 後方いずれかの文字列に一致
if data.endswith(('aaa', 'bbb', 'ccc')):
print("YES")形式(フォーマット)チェック(正規表現)
reという標準ライブラリを使用します。標準ですのでインストールは不要です。
以下の正規表現は完璧ではないです。正規表現は使えるよってくらいに思ってください。
import re
# メールアドレスの形式か?
email = 'aaa@xxx.com'
if re.match('(.+)@(.+)\.(.+)', email):
print("OK")
# 電話番号の形式か?
tel = "03-1234-5678"
if re.match('[0-9]{2}-[0-9]{4}-[0-9]{4}', tel):
print("OK")
# 日付の形式か?
data = "2020/01/04"
if re.match('[0-9]{4}/[0-9]{1,2}/[0-9]{1,2}$', data):
print("OK")
文字列の判別
全て大文字か
結果を見てもらえればわかると思いますが、小文字が含まれているとFalseを返します。数値や記号が含まれていてもTrueとなります。
text = "AAA" print(text.isupper()) # True text = "aaa" print(text.isupper()) # False text = "Aaa" print(text.isupper()) # False text = "A12" print(text.isupper()) # True text = "A+A\*" print(text.isupper()) # True
全て小文字か
「全て大文字か」の逆になります。こちらも数値や記号が含まれていてもTrueとなります。
text = "AAA" print(text.islower()) # False text = "aaa" print(text.islower()) # True text = "Aaa" print(text.islower()) # False text = "a12" print(text.islower()) # True text = "a+a\*" print(text.islower()) # True
全て英字か
数字と記号が含まれているとFalseを返します。
text = "AAA" print(text.isalpha()) # True text = "aaa" print(text.isalpha()) # True text = "Aaa" print(text.isalpha()) # True text = "a12" print(text.isalpha()) # False text = "a+a\*" print(text.isalpha()) # False
全て英数字か
記号が含まれているとFalseを返します。数値が含まれていてもTrueとなります。
text = "AAA" print(text.isalnum()) # True text = "aaa" print(text.isalnum()) # True text = "Aaa" print(text.isalnum()) # True text = "a12" print(text.isalnum()) # True text = "a+a\*" print(text.isalnum()) # False
全て数値か
符号(+や-)、桁区切り(,)、小数点(.)は、Falseになります。
text = "a12" print(text.isnumeric()) # False text = "123" print(text.isnumeric()) # True text = "+123" print(text.isnumeric()) # False text = "-123" print(text.isnumeric()) # False text = "123,456" print(text.isnumeric()) # False text = "123,456" print(text.isnumeric()) # False
全てASCII文字列か
ASCII文字って表現は難しいですよね。ざっくりですが、半角英数字、記号、スペースなどで、半角カタカナや2バイト文字のひらがなや漢字などは含みません。
text = "AAA" print(text.isascii()) # True text = "aaa" print(text.isascii()) # True text = "Aaa" print(text.isascii()) # True text = "a12" print(text.isascii()) # True text = "a+a\*" print(text.isascii()) # True text = "アアア" print(text.isascii()) # False text = "阿阿阿" print(text.isascii()) # False text = "あああ" print(text.isascii()) # False
タイトルケースか
タイトルケースってなんだ。以下のように単語の先頭を全て大文字にすることです。普通の文章を変換するとおかしいですが、タイトルだとなるほどなと思います。
例)The New York Times, Bloomberg Customer Support
text = "This is a pen." print(text.istitle()) # False text = "This Is a Pen." print(text.istitle()) # False text = "This Is A Pen." print(text.istitle()) # True
すべて満たすか?いずれか満たすか?
すべて満たすか?
以下では、配列内に指定した文字がすべて含まれているかをallで判断しています。
("2" in s)の箇所を後方一致などに変更しても利用できます。
if all(("2" in s) for s in ["aaa1", "bbb1", "ccc1"]):
print(True)
else:
print(False)
# True
if all(("2" in s) for s in ["aaa1", "bbb1", "ccc1"]):
print(True)
else:
print(False)
# Falseいずれか満たすか?
以下では、配列内に指定した文字がいづれか含まれているかをanyで判断しています。
("2" in s)の箇所を後方一致などに変更しても利用できます。
if any(("a" in s) for s in ["aaa1", "bbb1", "ccc1"]):
print(True)
else:
print(False)
# True
if any(("x" in s) for s in ["aaa1", "bbb1", "ccc1"]):
print(True)
else:
print(False)
# False以下のように("2" in s)の箇所を逆にすると、いずれかの文字が含まれているというチェックができます。
if any((s in "xyz") for s in ["k", "s", "x"]):
print(True)
else:
print(False)
# True
if any((s in "abc") for s in ["k", "s", "x"]):
print(True)
else:
print(False)
# Falseいずれも満たさない
以下では、配列内に指定した文字がいづれも含まれていないかを判断しています。
not anyで上記のいずれも満たすの逆になります。
if not any((s in "xyz") for s in ["k", "s", "x"]):
print(True)
else:
print(False)
# False
if not any((s in "abc") for s in ["k", "s", "x"]):
print(True)
else:
print(False)
# True
