奇数偶数判定プログラムの作成|Pythonの練習

こんにちは。Pythonの勉強をしています。

今回は練習を兼ねて、奇数と偶数を判定するプログラムを作成してみようと思います。

アルゴリズム

こんなアルゴリズムを考えてます。

  1. リスト型のデータを作成して、0から任意の数までを代入する。
  2. 用意したリスト型のデータに対して、1つずつ値を確認し、奇数の場合は奇数用のリスト型変数へ、偶数の場合は偶数用のリスト型変数へ値を代入する。
  3. 奇数用と偶数用のリスト型変数の中身を表示する。

とりあえず書いてみる(エラー出る)

勉強がてらなので、とりあえず思うがまま、書いてみます。

# 1. Prepare data set
num_list = []
for i in range(10):
    num_list[i] += i
print(num_list)

しかし、エラーが出てしまいました。

Traceback (most recent call last):
  File "C:\Users\Administrator\Test_023_PRACTICE_odd_or_even_number.py", line 4, in <module>
    num_list[i] += i
IndexError: list index out of range

「list index out of range」とあるので、インデックスが範囲外ですと言ってますね。確かに、リスト型の変数(num_list)の中身は空っぽです。

空っぽなのに、〇番目に〇〇を格納して!と言ってもそれは動きませんよね。〇番目も何も…という感じです。

「num_list[i] += i」としていたところがエラー原因で、その理由は代入する値(=の右側)でした。正しくは「[i]」とすべきでした。

エラー解消の別解

Google先生に聞くと、「append」という技を使うようです。

# 1. Prepare data set
num_list = []
for i in range(10):
    num_list.append(i)
print(num_list)

出力結果は以下の通り。

意図した通りです。

奇数と偶数を判定していく

と、思いきやエラーがでました。

# 1. Prepare Data Set
num_list = []
for i in range(10):
    num_list += [i]
#    num_list.append(i)
print(num_list)

# 2. Check If Odd or Even
for j in num_list:
    if j % 2 == 1:
        odd_list += [j]
        print(f"{j} is odd.")
    elif j % 2 == 0:
        even_list += [j]
        print(f"{j} is even.")
    else:
        print("Something went wrong.")

# 3. Check Results
print(f"Odd numbers are {odd_list}")
print(f"Odd numbers are {even_list}")

このように書いて実行すると、以下のようなエラーがでました。

r.py", line 16, in <module>
    even_list += [j]
NameError: name 'even_list' is not defined

なるほど、not definedですか。

教訓(リスト型は事前に定義)

今回度々やってしまったのですが、リスト型(あるいはタプル型)は最初は空で後から値を入れる場合は、事前に定義しておく必要があるようです。

以下のように、ちゃんと使用するすべてのリスト型変数を事前定義するようにしました。

# 0. Define Lists
num_list = []
odd_list = []
even_list = []

完成したプログラム!

やっと完成しました。初めての完成と思うと嬉しいですね。

結果はこんな感じです。

# 0. Define Lists
num_list = []
odd_list = []
even_list = []

# 1. Prepare Data Set
for i in range(10):
    num_list += [i]
#    num_list.append(i)
print(num_list)

# 2. Check If Odd or Even
for j in num_list:
    if j % 2 == 1:
        odd_list += [j]
        print(f"{j} is odd.")
    elif j % 2 == 0:
        even_list += [j]
        print(f"{j} is even.")
    else:
        print("Something went wrong.")

# 3. Check Results
print(f"Odd numbers are {odd_list}")
print(f"Odd numbers are {even_list}")

めっさん
  • めっさん
  • 当サイトの管理人。ニューヨークの大学を飛び級で卒業。その後日系企業でグローバル案件に携わる。大小様々な企業を転々としながら、マレーシアやアメリカへの赴任経験を持つ。バイリンガルITエンジニアとしていかに楽に稼ぐか日々考えている。年齢は秘密だけど定年も間近かな。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です