質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

898閲覧

Pythonにおいてaがint型のとき、 if a:を if a == ???: や if a != ???:の形で書き換えられるか?

退会済みユーザー

退会済みユーザー

総合スコア0

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/09/06 10:53

##前書き
Pythonの勉強をしていて、こんなコードを見つけました。

Python

1a = 0 2if a: 3 print('AAA') 4else: 5 print('BBB')

if文の条件式部分に変数のみが入っています。

自分は今まで、条件式部分はPythonでは値比較演算子CJavaでは比較演算子論理演算子
必ず使わなければならないと思っていたため、最初はこの記法は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のみを用いて)書き換えることはできるでしょうか?
それとも書き換えることは出来ず、
「お前のその個人的に気持ち悪く感じるという感情を捨てろ」としたほうが良いでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

条件式部分はPythonでは値比較演算子やCやJavaでは比較演算子や論理演算子を必ず使わなければならないと思っていた
if文の条件式が変数のみというのは個人的に気持ち悪く感じてしまったので、

そもそもその感覚を治した方が良いです。
Javaでも、

Java

1 int a=0; 2 boolean b; 3 b = a==0; 4 if(b){

だと問題ありません。Javaは条件部分にBoolean値しか書けないですが、Python等だとどの型の値でも書けるという点が異なっています。
変数のみを書いてあるのを見る頻度は低いかも知れませんが(こういう真偽値をとる変数を「フラグ」といいます)、Boolean値を返す関数を書いたりするのはごく普通です。

aがint型の範囲を取るとき、

Python

1if a!=0:

でしょうか。Pythonのint値で偽になるのは0だけです。

投稿2021/09/06 11:24

otn

総合スコア85901

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

python

1a = 0 2if a != 0: 3 print('AAA') 4else: 5 print('BBB') 6

が元のコードと同等です。

なお、intオブジェクトやその他のオブジェクトが真と判断されるか偽と判断されるかについては、公式ドキュメント 真理値判定をお読みください。

投稿2021/09/06 11:00

編集2021/09/06 11:22
ppaul

総合スコア24670

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問