【初心者向け】Python超入門:練習問題を解いてみる
前回の記事で出した練習問題を解いてみる
前回の記事で出題したPythonの練習問題、皆さん解くことはできましたか? 今回は、私が解いてみたその解答とGeminiでの解答を見ていきましょう。
問題1:
自分の年齢を入力し、20歳以上かどうかを判定するプログラムを作成してください。
わたしの解答1:
def Otona(x):
if x >= 20:
return True
else:
return False
x = 20
if Otona(x):
print('20以上ですね。')
else:
print('20未満ですね。')
Geminiの解答1:
def check_age():
"""
入力された年齢が20歳以上かどうかを判定する関数
"""
age = int(input("あなたの年齢を入力してください: "))
if age >= 20:
print("あなたは20歳以上です。")
else:
print("あなたは20歳未満です。")
# 関数を呼び出す
check_age()
プログラムの説明
関数定義: check_age() という名前の関数を定義します。関数とは、特定の処理をまとめたもので、再利用性を高めるために使われます。
入力: input() 関数を使って、ユーザーに年齢を入力してもらいます。入力された値は文字列型なので、int() 関数を使って整数型に変換します。
判定: if 文を使って、入力された年齢が20以上かどうかを判定します。
出力: 判定の結果に応じて、適切なメッセージを表示します。
ユーザーに入力を促す関数(input)が使われていたので、次の問題からわたしも使おうと思います。
問題2:
3つの数値を入力し、その中で最大の値を出力するプログラムを作成してください。
わたしの解答2:
def max_value():
"""
3つの数値を入力し、その中で最大の値を出力する関数
"""
value[0] = float(input("1つめの数値を入力してください。"))
value[1] = float(input("2つめの数値を入力してください。"))
value[2] = float(input("3つめの数値を入力してください。"))
return max(value)
#関数を呼び出す
max_value()
エラーが出ました。
----> 7 value[0] = float(input("1つめの数値を入力してください。"))
NameError: name 'value' is not defined
定義されていないと怒られました。配列みたいにこんな感じで指定して入力してはダメなんですね。
def max_value():
"""
3つの数値を入力し、その中で最大の値を出力する関数
"""
value1 = float(input("1つめの数値を入力してください。"))
value2 = float(input("2つめの数値を入力してください。"))
value3 = float(input("3つめの数値を入力してください。"))
value = [value1, value2, value3]
return max(value)
#関数を呼び出す
max_value()
これは大丈夫でした。
Geminiの解答2:
def find_max_number():
"""
3つの数値を入力し、その中で最大の値を出力する関数
Returns:
None
"""
num1 = float(input("最初の数値を入力してください: "))
num2 = float(input("2番目の数値を入力してください: "))
num3 = float(input("3番目の数値を入力してください: "))
# max関数を使って最大値を求める
max_number = max(num1, num2, num3)
print("最大の数は", max_number, "です。")
if __name__ == "__main__":
find_max_number()
このプログラムの解説
関数定義: find_max_number() という名前の関数を定義します。この関数の中に、数値の入出力と最大値の計算の処理をまとめます。
数値入力: input() 関数を使って、ユーザーから3つの数値を入力してもらいます。入力された値は文字列なので、float() 関数で浮動小数点数に変換します。
最大値の計算: max() 関数は、複数の数値の中から最大の値を返す関数です。ここでは、入力された3つの数値 num1, num2, num3 の中で最大のものを max_number に代入します。
結果の出力: print() 関数を使って、求めた最大値を出力します。
メインブロック: if name == "main": の部分は、このファイルが直接実行されたときにのみ、find_max_number() 関数が呼び出されるようにするためのものです。
ん?「if name == "main"」って何?
「このファイルが直接実行されたときにのみ、find_max_number() 関数が呼び出されるようにする」ってどういう意味???
ということで、調べました。
Geminiの回答
直接実行した場合: このファイルをPythonインタプリタで直接実行した場合、name の値は "main" になります。そのため、if 文の条件が真となり、greet() 関数が呼び出され、「Hello, world!」と表示されます。
モジュールとしてインポートされた場合: このファイルを別のPythonファイルから import してモジュールとして使用した場合、name の値はモジュールの名前になります。そのため、if 文の条件が偽となり、greet() 関数は呼び出されません。
ということは、モジュールで呼び出される予定のプログラムを書くときに「if name == "main"」って書いておいておけば、その関数のテストができるし、そのテストプログラム書いたまま実行環境に行っちゃって大丈夫。ってことなんかな?
問題3:
自分の年齢を入力し、20歳以上かどうかを判定するプログラムを作成してください。
わたしの解答3:
def favorite_fruit():
"""
好きな果物を3つ要素とするリストを作成し、それぞれの果物の名前を出力する関数
"""
fruits = ['orange', 'banana', 'apple']
print(fruits)
#関数呼び出し
favorite_fruit()
Geminiの解答3:
fruits = ["りんご", "バナナ", "いちご"]
for fruit in fruits:
print(fruit)
このプログラムの解説
リストの作成:
fruits = ["りんご", "バナナ", "いちご"] の部分で、"りんご"、"バナナ"、"いちご" という3つの要素を持つリスト fruits を作成しています。
for文による繰り返し:
for fruit in fruits: の部分で、fruits リストの各要素を順番に fruit 変数に代入し、以下の処理を繰り返します。
果物の出力:
print(fruit) で、現在のループで fruit 変数に入っている果物の名前を出力します。
ループを使って1つずつフルーツを出力するという発想がなかった・・・
おわりに
前回のPython超基礎のブログでGeminiが出題してくれた練習問題を解いてみました。
問題の意図をくみ取れていないこともありましたが、実装に役立つサンプルなどもあり、Geminiで解答をもらう勉強が役に立ちそうです。
Discussion