PR

ひたすら復習問題

暗い部屋で鬼のお面をつけた若い人がヘッドホンを着用しながら光るRGBメカニカルキーボードを打ち込んでいる様子。コンピュータの画面は青い光を放ち、本棚や観葉植物が背景にある。 python

勉強を続けていても、仕事やプライベートが忙しくなると、なかなか学習の時間が取れないことってありますよね。実は、最近の私はまさにその状態でした。しかし、ようやく忙しさが落ち着いたので、また学習を再開することにしました。でも、いざ始めてみるとすっかり忘れていることも多くてびっくり……。

そこで今日は復習を兼ねて、ひたすら問題演習に取り組むことにしました!以下の問題を通して、基本をしっかりと押さえていきます。

問題1. リスト内の値の合計を計算する関数を作りましょう

課題内容: リストの中にある数字をすべて足し合わせて合計値を計算し、それを返す関数を作成してください。以下の条件を満たすようにコードを考えてみましょう。

条件:

  1. 関数名は calculate_sum とします。
  2. 関数は numbers という名前のリストを入力として受け取ります。
  3. リストが空の場合には以下のメッセージを返します。
    • "リストに値がありません。"
  4. リストが空でなければ、すべての要素の合計値を計算し、以下のメッセージを返します:
    • "リスト内の合計値は {合計値} です。"

サンプル出入力: リストに値がある場合

numbers = [1, 2, 3, 4, 5]
結果:
リスト内の合計値は 15 です。

リストに値がない場合

numbers = []
結果:
リストに値がありません。

回答

def calculate_sum(numbers):
  if len(numbers) == 0:
    return 'リストに値がありません'
  total = sum(numbers)
  return f'リスト内の合計値は{total}です'

numbers = [1, 2, 3, 4, 5]
print('結果:')
print(calculate_sum(numbers))

print('------------------------')

numbers = []
print('結果:')
print(calculate_sum(numbers))

解説

リストの空チェック リストが空かどうかを確認する場合、以下のコードが一般的です。

if len(numbers) == 0:
    return "リストに値がありません。"

len(numbers)0であれば、リストに要素が存在しないことを意味します。このとき、条件式がTrueとなり、指定されたメッセージ "リストに値がありません。" を返します。

合計値を計算 合計値の計算にはPython標準の sum() 関数を使うと非常に簡単です。例えば、以下のように記述します。

total = sum(numbers)

この関数を使うことで、リスト内の数値を一括で足し合わせて合計値を取得できます。

メッセージの形式
結果の表示には、f-string を活用すると便利です。動的に値を挿入する簡潔な書き方が可能です。

return f"リスト内の合計値は {total} です"

f-stringを使うと、特別なフォーマットを意識する必要がなく、直観的で読みやすいコードになります。

しっかり復習しつつ、先へ進みましょう。「ひたすら演習!」、楽しみながらPythonに取り組みましょう!

問題2.リスト内の偶数と奇数を分けてカウントする

課題内容

  1. 以下の仕様を満たす関数 count_even_odd を作成してください。
  2. 入力として、数値を含むリスト numbers を渡します。
  3. リストが空の場合は、次のメッセージを返します:
    • "リストに値がありません"
  4. リストに値がある場合は、偶数と奇数の個数をカウントし、それぞれの個数を含む以下の形式のメッセージを返してください:
    • "リスト内には偶数が {偶数の個数} 個、奇数が {奇数の個数} 個あります"

サンプル出入力

入力例1:[1, 2, 3, 4, 5]
結果:リスト内には偶数が 2 個、奇数が 3 個あります。

入力例2:[]
結果:リストに値がありません

入力例3:[2, 4, 6, 8, 10]
結果:リスト内には偶数が 5 個、奇数が 0 個あります。

回答

def count_even_odd(numbers):
  if len(numbers) == 0:
    return 'リストに値がありません'
  even_count = 0
  odd_count = 0
  for number in numbers:
    if number % 2 == 0:
      even_count += 1
    else:
      odd_count +=1
  return f'リストの中には偶数が{even_count}個、奇数が{odd_count}個あります'

numbers = [1, 2, 3, 4, 5]
print(count_even_odd(numbers))
print('-----------------------------')
numbers = []
print(count_even_odd(numbers))
print('-----------------------------')
numbers = [2, 4, 6, 8, 10]
print(count_even_odd(numbers))
print('-----------------------------')

解説

forを使用
Pythonのループ構造 (for) を使って、リストの中身を一つずつ確認しています。

  for number in numbers:
    if number % 2 == 0:
      even_count += 1
    else:
      odd_count +=1
  return f'リストの中には偶数が{even_count}個、奇数が{odd_count}個あります'

条件 num % 2 == 0 を使い、数値が偶数か奇数かを判定しています。
偶数判定の場合には even_count をカウントアップします。
奇数判定の場合には odd_count をカウントアップします。

ループ構造forが入ってくると少し難しくなりましたね。私は「even_number」と「odd_number」をforの中に入れていたため、繰り返すたびに初期化されてしまってました。では、先へ進みましょう。「ひたすら演習!」

問題3.数値のリストから偶数のみにフィルターをかける

課題内容

  1. 次の要件を満たす関数 filter_even_numbers を作成してください。
  2. 入力として numbers というリストを受け取ります。
  3. リストが空の場合は、次のメッセージを返します:
    • "リストに値がありません"
  4. リストに値がある場合は、偶数だけを取り出して新しいリストを作成し、次の形式で返してください:
    • "偶数のみのリスト: [偶数の値,...]"

サンプル入出力

入力例1: [1, 2, 3, 4, 5]
結果:偶数のみのリスト: [2, 4]

入力例2: []
結果:リストに値がありません

入力例3: [2, 4, 6, 8, 10]
結果:偶数のみのリスト: [2, 4, 6, 8, 10]

回答

def filter_even_numbers(numbers):
  if len(numbers) == 0:
    return 'リストに値がありません'
  even_list = []
  for num in numbers:
    if num % 2 == 0:
      even_list.append(num)
  return f'偶数のみのリスト:{even_list}'
    
numbers = [1, 2, 3, 4, 5]
print('結果:')
print(filter_even_numbers(numbers))

print('-----------------------------')

numbers = []
print('結果:')
print(filter_even_numbers(numbers))

print('-----------------------------')

numbers = [2, 4, 6, 8, 10]
print('結果:')
print(filter_even_numbers(numbers))

解説

偶数の抽出
リスト内の要素を1つずつ確認し、偶数のみを取り出します。
条件式 num % 2 == 0 を使うことで偶数であるかを識別できます。

even_numbers = []
for num in numbers:
    if num % 2 == 0:
        even_numbers.append(num)

そろそろ疲れてきたので、10分休憩しましょう。


休憩したら、先へ進みましょう。「ひたすら演習!」

問題4.リスト内の最大値と最小値を求める

課題内容

  1. 関数名は find_max_min にすること。
  2. 入力としてリスト numbers(整数のみを含む)を受け取ります。
  3. リストが空の場合は、次のメッセージを返してください:
    • "リストに値がありません"
  4. リストが空でなければ、次のメッセージを返してください:
    • "リスト内の最大値: {最大値}, 最小値: {最小値}"

サンプル入出力

入力例1: [3, 5, 7, 9, 1]
結果:リスト内の最大値:9,最小値:1

入力例2: []
結果:リストに値がありません

回答

def find_max_min(numbers):
  if len(numbers) == 0:
    return 'リストに値がありません'
  max_number = max(numbers)
  min_number = min(numbers)
  return f'リスト内の最大値:{max_number},最小値:{min_number}'

numbers = [3, 5, 7, 9, 1]
print(find_max_min(numbers))
print('------------------------')
numbers = []
print(find_max_min(numbers))

解説

最大値・最小値の計算
Pythonの組み込み関数 max() と min() を使って、リスト内の最大値・最小値を取得します。
増減の計算やループを使用する必要はなく、一行で簡単に取得できます。

max_number = max(numbers)
min_number = min(numbers)

問題5.数値リスト内の重複を削除し、昇順で並べ替える

課題内容

  1. 関数名は unique_sorted_list とします。
  2. 入力として数値のみを含むリスト numbers を受け取ります。
  3. リストが空の場合は、次のメッセージを返してください:
    • "リストに値がありません"
  4. リストが空でない場合は、以下の形式で結果を返します:
    • "重複を除き昇順で並べ替えたリスト: [要素1, 要素2, ...]"

サンプル入出力

入力例1: [5, 2, 8, 2, 1, 8, 5, 3]
重複を除き昇順で並べ替えたリスト: [1, 2, 3, 5, 8]

入力例2: []
結果:リストに値がありません

回答

def unique_sorted_list(numbers):
  if len(numbers) == 0:
    return 'リストに値はありません'
  unique_numbers = set(numbers)
  sorted_list = sorted(unique_numbers)
  return f'重複を除き昇順で並べたリスト:{sorted_list}'

numbers = [5, 2, 8, 2, 1, 8, 5, 3]
print(unique_sorted_list(numbers))
print('------------------------------------------------')
numbers = []
print(unique_sorted_list(numbers))

解説

重複削除:
Pythonでは set() を使うことでリストの重複を簡単に削除できます。
昇順ソート:
sorted() を使うことでリストを昇順に並べ替えることができます。

問題6.リストの要素をペアで足して、新しいリストを作る

課題内容

  1. 新しい関数 pairwise_sum を作成してください。
  2. 入力として整数を含むリスト numbers を受け取ります。
  3. リスト内の要素をペアで足し算して新しいリストを返します。
    • ペアは、隣り合う 2 つの要素同士を足して作ります。
    • 最後の要素がペアになれない場合、そのまま新しいリストに追加します。
  4. リストが空の場合は、次のメッセージを返してください:
    • "リストに値がありません"
  5. リストが1つの要素のみの場合は、そのまま新しいリストとして返します。

サンプル入出力

入力例1: [3, 5, 7, 9, 1]
結果:ペアごとの合計リスト: [8, 16, 1]

入力例2: [4, 3, 2, 1, 6, 10]
結果:ペアごとの合計リスト: [7, 3, 16]

入力例3: []
結果:リストに値がありません

回答

def pairwise_sum(numbers):
  if len(numbers) == 0:
    return 'リストに値がありません'
  elif len(numbers) == 1:
    return f'ペアごとの合計リスト{numbers}'
  result = []
  for i in range(0, len(numbers)-1, 2):
    pair_sum = numbers[i] + numbers[i+1]
    result.append(pair_sum)
  if len(numbers) % 2 != 0:
    result.append(numbers[-1])
  return f'ペアごとの合計リスト{result}'


numbers = [3, 5, 7, 9, 1]
print('結果')
print(pairwise_sum(numbers))
print('------------------------------------------------')

# 入力2: 空リストの場合
numbers = []
print('結果:')
print(pairwise_sum(numbers))

print('------------------------------------------------')

# 入力3: 要素が1つのみの場合
numbers = [1]
print('結果:')
print(pairwise_sum(numbers))

print('------------------------------------------------')

解説

ペアごとの計算
偶数インデックスで range() のステップを 2 として、隣り合う要素の合計を計算してリストに追加します。

for i in range(0, len(numbers) - 1, 2):  # リストの1つ目の要素から、2つおきに要素を取得します。
    pair_sum = numbers[i] + numbers[i + 1]  # 取得した要素とその次の要素を足し合わせます。
    result.append(pair_sum)  # 足し合わせた値を新しいリストに追加します。

奇数要素への対応
ループ終了後に要素数が奇数の場合は、最後の要素をリストに追加します。

if len(numbers) % 2 != 0:  # リストの要素数が奇数の場合に実行されます。
    result.append(numbers[-1])  # [-1]はリストの最後の要素を指します。その値を新しいリストに追加します。

今回は以上にしましょう。
お疲れ様でした!

まとめ

まとめ

今回の演習問題では、Pythonの基本的なリスト操作を通じて、コードを書く力を磨きました。さまざまな課題を通して、計算処理、要素のフィルタリング、リストの並べ替え、ペアでの操作など、リストを扱う上で重要なテクニックを習得できました。

特に以下のポイントを学びました:

  1. リストの操作方法 – sum() や max()min() を使って効率的に値を取得する方法。
  2. 条件分岐とループ – if や for を活用して、リストの特定条件をもとに処理する方法。
  3. 重複削除と並べ替え – set() と sorted() を使用してデータを整理するテクニック。
  4. 動的なメッセージ作成 – f-string を使った出力の柔軟性。

これらを学ぶことで、単純なリスト処理だけでなく、より複雑な問題を解決する応用力をアップできたのではないでしょうか。

最後に

演習を通して新たな発見や気づきがあったと思います。プログラミング学習は一朝一夕にはいきませんが、継続することで着実に成長できます。定期的な復習と挑戦を繰り返しながら、次のステップを目指していきましょう。

お疲れ様でした!次回もぜひ一緒に学びましょう!

コメント

タイトルとURLをコピーしました