問題
自然数のリストを入力すると、そのリストから奇数をすべて削除したリストを出力するプログラムを作成せよ。
さらに、そのプログラムが正しく機能することを示す具体例を与えよ。
解答
解答例1
def delete_odd(natural_number_list: list):
result = []
for number in natural_number_list:
if number % 2 == 0:
result.append(number)
print(result)
sample_list_1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
sample_list_2 = [11, 13, 15, 17, 19, 12, 14, 16, 18, 20]
delete_odd(sample_list_1)
delete_odd(sample_list_2)
上記の実行結果
[2, 4, 6, 8, 10]
[12, 14, 16, 18, 20]
解説
この問題のポイントは、
- 奇数・偶数を判別する
- 奇数の場合はリストから値を削除する
の2点です。
順番に見ていきましょう。
奇数・偶数を判別する
奇数か偶数かを判別する方法として最も一般的なのは2で割った余りをチェックする方法です。
余りが1なら奇数、余りが0なら偶数になります。
Python における余りを求める演算子は%
です。
2で割った余りの結果をもとにif
文を使用して条件分岐させます。
a = 144981 / 9
if a % 2 == 1:
print('a は奇数です。')
elif a % 2 == 0:
print('a は偶数です。')
print('a:',a)
上記の実行結果
a は奇数です。
a: 16109.0
奇数の場合はリストから値を削除する
続いて、リストからの値の削除です。
元々の問題は「奇数の場合はリストから値を削除する」ですが、今回の解答例では、
- 新しいリストを用意する
- 偶数の場合、新しいリストに追加する
とし、新しいリストに偶数だけ入れることで、元のリストから奇数を削除した新しいリストを作っています。
pop
メソッドやdel
文を使って、元のリストから奇数を削除することもできますが、今回は、新しいリストを作って、そこに偶数を追加する、という方法を取りました。
リストへの値の追加はappend
メソッドを使用します。
num_list = [1, 2, 3]
num_list.append(100)
print(num_list)
上記の実行結果
[1, 2, 3, 100]
ChatGPT に解いてもらった
ChatGPT にも解いてもらいました。
ChatGPT の解答
以下に、指定された条件に従ってPythonでプログラムを作成しました。このプログラムは、与えられた自然数のリストから奇数を削除して新しいリストを返します。
def remove_odds(numbers):
even_numbers = [num for num in numbers if num % 2 == 0]
return even_numbers
# 具体例
input_list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
output_list = remove_odds(input_list)
print(f"入力リスト: {input_list}")
print(f"奇数を削除したリスト: {output_list}")
具体例として、入力リストに [1, 2, 3, 4, 5, 6, 7, 8, 9] を使用します。このプログラムを実行すると、以下のような出力が得られます。
入力リスト: [1, 2, 3, 4, 5, 6, 7, 8, 9]
奇数を削除したリスト: [2, 4, 6, 8]
この出力から、プログラムが正しく奇数を削除していることがわかります。
ChatGPT の解説
このプログラムは、与えられた自然数のリストから奇数を削除し、新しいリストに偶数だけを格納して返す機能を持ちます。以下に、プログラムの要点を解説します。
def remove_odds(numbers):
ここで、remove_odds
という関数を定義しています。この関数は、リストnumbers
を引数として受け取ります。even_numbers = [num for num in numbers if num % 2 == 0]
この行では、リスト内包表記(list comprehension)を使って、入力リストnumbers
から偶数だけを取り出し、新しいリストeven_numbers
に格納しています。条件num % 2 == 0
は、数値num
が2で割り切れる(偶数である)場合にのみTrueになります。return even_numbers
奇数が削除された新しいリストeven_numbers
を返します。- 具体例として、入力リスト
input_list
に [1, 2, 3, 4, 5, 6, 7, 8, 9] を与えて、remove_odds
関数を呼び出します。その結果をoutput_list
に格納します。 - 最後に、
print()
関数を使って、入力リストと奇数を削除したリストを出力します。これにより、プログラムが正しく機能していることが確認できます。
このプログラムの主なポイントは、リスト内包表記を使って簡潔にリストから奇数を削除し、新しいリストを作成することです。
Google Colaboratory
解答例や解説のコードは Google Colaboratory で確認しています。(ChatGPT が解答してくれたコードも確認しています。)
環境構築の不要な Google が提供している Webサービスなので、Python を学習中の方にはオススメです。
おわりに
今回の問題は LINE のオープンチャットに投稿された、おそらくどこかの学校の課題です。
今後も具体的な問題・課題の解説記事を増やしていきたいと思っています。
解説して欲しい課題がありましたら、お問い合わせフォームからご連絡ください。
以上です。
コメント