今回は、LINEオープンチャットや teratail に投稿される質問の中で、for
文に関するよくあるミスをご紹介します。
for
文の基本的な書き方については下記記事を参照ください。
最後の値しか出力されません!(泣)
こんな感じ。
number_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for i in number_list:
even_list = []
if i % 2 == 0:
even_list.append(i)
print(even_list)
上記の実行結果
[10]
やりたいことは、number_list
の中の偶数だけをeven_list
に入れる。
つまり、期待した結果は、[2, 4, 6, 8, 10]
ですが、最後の[10]
だけしか表示されない。
え!?そんなのすぐ気付くでしょ〜
そう思いますか?
でも、このミス、月1ぐらいは遭遇します。
上で挙げたような単純で短いコードならすぐ気付けるかもしれませんが、このfor
文以外に気を取られていると意外と気付かないようです。
このミスの原因は、for
文の中の最初の処理でeven_list
に空のリストを格納しているからですね。
そのため、次のようにfor
文の前にeven_list
を作成することで、解決します。
number_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_list = []
for i in number_list:
if i % 2 == 0:
even_list.append(i)
print(even_list)
上記の実行結果
[2, 4, 6, 8, 10]
単純なミスですが、単純だからこそ気付かない、ということもあるのかもしれません。
変数の値が変わりません!(泣)
こんな感じ。
for i in range(1, 4):
url = 'https://www.tera.tail/page=i'
print(url)
上記の実行結果
https://www.tera.tail/page=i
https://www.tera.tail/page=i
https://www.tera.tail/page=i
文字列の中に変数名を入れても、文字列として扱われてしまいます。
こういう場合は、str
型に変換して、結合するのが最も簡単でしょう。
for i in range(1, 4):
url = 'https://www.tera.tail/page=' + str(i)
print(url)
上記の実行結果
https://www.tera.tail/page=1
https://www.tera.tail/page=2
https://www.tera.tail/page=3
もう1つ、下記のような書き方もできます。これは、Python 3.6 以降で使用できる書き方です。
for i in range(1, 4):
url = f'https://www.testtera.tail/page={i}'
print(url)
上記の実行結果
https://www.tera.tail/page=1
https://www.tera.tail/page=2
https://www.tera.tail/page=3
Python 3.6 より古いバージョンの場合は、format()
メソッドを使います。(Python 3.6 以降でも使用可)
for i in range(1, 4):
url = 'https://www.testtera.tail/page={}'.format(i)
print(url)
上記の実行結果
https://www.tera.tail/page=1
https://www.tera.tail/page=2
https://www.tera.tail/page=3
Colab
掲載しているコードは Google Colaboratory で確認できます。
環境構築の不要な Google が提供している Webサービスなので、Python を学習中の方にはオススメです。
おわりに
今回のような単純だけど「やりがちなミス」は意外とあると思うので、こんなのもあるよ〜というのがあれば教えてください。
以上です。
コメント