【pythonの落とし穴】if文に複数条件・for,whileとelseの合体

テックジム東京本校のトレーナーの一人から、ポエム(独り言)をいただきましたので、共有します。違う見解(反論)もあるかもしれませんが、その際は「お問い合わせ」で、承ります。

ひとつのif文に複数の条件を入れた場合(and とか or とか)

「xが 0か1なら ‘cat’を出力」

「xが 0か1以外なら ‘dog’を出力」

したいとします。

次のように書きました。

(python以外のプログラミング言語だとそもそもこういう書き方ができる言語は少ないです。実行時エラーもしくはコンパイルエラーになります)

x = 3
if x == 0 or 1 :
  print(‘cat’) 
else:
  print(‘dog’)  

これを実行すると、’dog’を出力して欲しいのに、’cat’が出力されてしまいます。

これはpythonの中の人がどう解釈しているかというと

・x == 0 → 偽

or

・1 → 真

・・・うん、片方が真なので’cat’出力だ。

となってしまいます。

正解は以下です。

if x == 0 or x == 1 :
  print(‘cat’) 
else:
  print(‘dog’)  

さらに、pythonの場合には以下のように書くことも可能です。

if x == (0 or 1) :
  print(‘cat’) 
else:
  print(‘dog’)  

可能なのですが・・・python以外のプログラミング言語ではこういう記述が可能なものが非常に少ないので他のプログラミング言語を主に使っている人から見ると多少気持ち悪いです。

ですので個人的には前者の正解で書いて欲しいなあと思いますがPythonistの方々は後者の方が好きかもしれません。

for,whileとelseが合体できる

pythonでは以下のように書くとfor、whileの終了条件を満たしたあとに一度だけ実行する処理を記載することができます。

numbers = [0,1,2]

for n in numbers:
  print(n)
else:
  print(‘finish’)

c = 0
while c < 3:
  print(c)
  c += 1
else:
  print(‘finish’)

上記ソースを実行すると出力はこのようになります

0
1
2

finish

0
1
2
finish

しかしながら、for、whileの途中で break が入ると、else以降が実行されないという恐ろしい罠があります。

以下のソースを実行すると

numbers = [0,1,2]

for n in numbers:
  print(n)
  if n == 1 :
    break
else:
  print(‘finish’)

c = 0
while c < 3:
  print(c)
  if c == 1 :
    break
  c += 1
else:
  print(‘finish’)

出力はこのようになります。(’finish’が出力されません)

0
1
0
1

for、whileとelseが合体できるプログラミング言語を私はpython以外で見かけたことがありませんし、下手するとバグを埋め込む機能のように思えるので、この記載は使わないほうが良いのではないか・・と個人的には思います。

が、Pythonistの方々はそうでもないかもしれません。

もっとも効率的なスキル習得「テックジム方式」とは?

「テックジム方式」とは、基礎知識なしでも、座学なしでプログラミングに専念できるように設計されたプログラミングのカリキュラムメソッドです。

優れたエンジニアの多くは、職業訓練学校や研修スクールで学ぶような学び方をしません。 作りたいものを作っていたら、自然に習得できているのです。そして、優れた指導者(メンターや師匠)との出会いがエンジニアとしてのプロフェッショナル性を高めます。

この自発性とプロフェッショナル性を兼ね備えたのが「テックジム方式」です。 授業を聞いたりテキストを読むことで失う時間を、純粋にプログラミング時間に向けることで、習得効率は飛躍的に向上し、モチベーションも維持できます。 その時点で知らなくていい知識や概念を可能な限り削ぎ落とし、知るべきタイミングが訪れた時にはすでに課題を通じて覚えているようなスキル習得の自動化を図ります。

講座で用いるサンプルソースや課題は、最も効率よく学べるように細部に渡って設計されています。 まるで魔法にかかったようにプログラミンスキルが習得できるのが「テックジム方式」の醍醐味です。

コースは、Python基礎コース・AIエンジニア養成コース・ブロックチェーンエンジニアコース・ARアプリ開発コース・ロボットエンジニアリングコースなどをご用意しております。

【無料】ゼロからはじめるPython入門講座

オープン講座では、講義&実習スタイルで、テックジムの自習教材を体験していただきつつ、Pythonの初歩を学んでいただきます。

【オンライン/無料】ゼロからはじめるPythonプログラミング入門講座(毎週・水・木・土開催)

すでに何らかのプログラミングをやっている方や、 プログラミング学習への決意度が高い人は、 どんどんカリキュラムを進んでいける「Python基礎コース体験会」の方がオススメです。

どんなレベルからでも、自分のペースではじめられますし、テキストを受け取りにくるだけでもOKです。

【テックジム】Pythonコース・体験会(平日19:00-22:00)途中参加・途中退席OK

いつでも通える! どんなレベルでもOK!
ジム型プログラミング塾「テックジム:TechGYM」

いつでも参加でき、ずっとスキルを磨き続けることのできる「ジム」の要素が「TechGYM(テックジム)」の大きな特徴です。

月額2万円の「プログラミングライフ」をお楽しみください。

【東京本校】テックジムPython基礎コース・体験会「自習で学ぶ高速プログラミング」(平日19:00-22:00)



【無料】ゼロからはじめるPython入門講座(メール講座)
登録フォーム
お名前(姓名)
 
メールアドレス