🐷

【初心者向け】Python超入門:練習問題を解いてみる

2024/10/06に公開

前回の記事で出した練習問題を解いてみる

前回の記事で出題した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