##前書き
Pythonの勉強をしていて、こんなコードを見つけました。
Python
1a = 0 2if a: 3 print('AAA') 4else: 5 print('BBB')
if文の条件式部分に変数のみが入っています。
自分は今まで、条件式部分はPython
では値比較演算子
やC
やJava
では比較演算子
や論理演算子
を必ず使わなければならないと思っていたため、最初はこの記法はPython
独自のものなのかと思っていました。
しかし実験してみたところ、C
ではできて、Java
ではできないことが分かりました。
C
1#include <stdio.h> 2#include <stdbool.h> 3int main(void){ 4 int a=0; 5 if (a){printf("WOW");} 6 else{printf("NO");} 7} 8//出力はNO
Java
1import java.util.*; 2 3public class Main { 4 public static void main(String[] args) throws Exception { 5 int a=0; 6 if(a){ 7 System.out.println("AAA"); 8 } 9 else{ 10 System.out.println("BBB"); 11 } 12 } 13} 14//Main.java:6: error: incompatible types: int cannot be converted to boolean
なぜC
で出来てJava
では出来ないのかはまあ置いておいて、
if文の条件式が変数のみというのは個人的に気持ち悪く感じてしまったので、
この条件式を値比較演算子
を用いて書き直したいと考えました。
ちなみにPython3.9.0
です。
試したこと
色々試してみたところ、a=0,1
のとき、a == True
と書くとうまく一致することが分かりました。
Python
1a = 0 2if a: 3 print("A") 4else: 5 print("B") 6a = 0 7if a == True: 8 print("A") 9else: 10 print("B") 11 12 13a = 1 14if a: 15 print("A") 16else: 17 print("B") 18a = 1 19if a == True: 20 print("A") 21else: 22 print("B") 23#出力はB B A A
しかし、aがそれ以外の範囲を取るとうまくいきません。
Python
1from random import Random 2a = 2 3if a: 4 print("A") 5else: 6 print("B") 7a = 2 8if a == True: 9 print("A") 10else: 11 print("B") 12 13 14a = -1 15if a: 16 print("A") 17else: 18 print("B") 19a = -1 20if a == True: 21 print("A") 22else: 23 print("B") 24#出力はA B A B
aがint型の範囲を取るとき、
if a:
を if a == ???:
やif a != ???:
の形で(if,elif,else
のみを用いて)書き換えることはできるでしょうか?
それとも書き換えることは出来ず、
「お前のその個人的に気持ち悪く感じるという感情を捨てろ」としたほうが良いでしょうか?
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。