#【python】if文を1一文で書く方法。
if else文は一文で書くことができる。
・式(Trueで実行) if 条件式 else 式(falseで実行)
公式ページ
「x if C else y」 という式は最初に条件 x ではなく C を評価します。
C が true の場合 x が評価され値が返されます。
それ以外の場合には y が評価され返されます。
a=5
if a<5:
i*5
else:
i*2
a=5
i*5 if a<5 else i*2
▼応用
@shiracamusさんに教えてもらった記述の中身を紐解いてみる。
def gradingStudents(grades):
return [grade + (0 if grade < 38 or grade % 5 < 3 else -grade % 5)
for grade in grades]
if __name__ == '__main__':
grades_count = int(input().strip())
grades = [int(input().strip()) for _ in range(grades_count)]
result = gradingStudents(grades)
print(*result, sep='\n')
###▼if文を一列で書く
「0 if grade < 38 or grade % 5 < 3 else -grade % 5」
38未満かつ、5で割った余りが3以下なら0。(True)
Falseなら、マイナス値を5で割った余りを算出。
###▼マイナスの余り
「-5%3」のようにマイナスの値を割った場合の余り。
必ずプラスの整数になる
-x%y
商はマイナス。
余りは 0<=余り<y
「-5%3」の場合、商:-2, 余り:1
余り=3*(-2)-5=1
###内包表記
・for文を一文で書く記述。
[式 for 変数 in イテラブル]
└ 出力はlist
・return [内包表記]
└ returnが実行されるのは内包表記の処理が全部終わってから。
まとめると、
- 内包表記でgradeに入っている要素を一つづつ取り出す。
- if文でgradeに足す値を決定する。
- 要素の数だけ繰り返す
- 「grade + 0 or 余り」の値をリスト化
- returnで返す。
##if文の一文表記と内包表記を使ったプログラムの例
###2つの文字列を比較して、同じ文字が含まれているかを調べる。
s1,s2="h","world"
def twoStrings(s1, s2):
return "YES" if sum([s2.count(i) for i in set(s1)]) else "NO"
twoStrings(s1, s2)