Pythonの標準入力(stdin)

投稿日: 2024年1月7日

ユーザーがキーボードなどを介してプログラムにデータを入力する方法です。

Pythonでは、input() 関数を使って標準入力からデータを受け取ります。この関数は入力されたデータを文字列として返します。

1.基本

例えば、ユーザーからの入力を受け取り、それを画面に表示する基本的なコードは次のようになります:

user_input = input("何か入力してください: ")
print("あなたが入力したのは: " + user_input)

このコードでは、input() 関数がユーザーからの入力を待ち、入力されるとその値を user_input に格納します。その後、print() 関数を使って入力された内容を表示します。

2.カンマで区切の場合

10,20,30,40 のようなカンマで区切られた文字列が入力された場合、それらを個別の数値に分割して合計するには、次の手順を実行します:

  1. 文字列をカンマで分割する。
  2. 分割された各要素を整数に変換する。
  3. すべての整数を合計する。

Pythonでこれを行うコードは以下のようになります

# 入力を受け取る
input_string = input("数値をカンマで区切って入力してください(例:10,20,30,40): ")

# 文字列をカンマで分割し、整数のリストに変換
numbers = [int(n) for n in input_string.split(',')]

# 数値を合計する
total = sum(numbers)

# 結果を表示
print("合計: ", total)

このコードでは、split(‘,’) メソッドを使って入力された文字列をカンマで分割し、リスト内包表記(list comprehension)で各要素を整数に変換しています。最後に sum() 関数でリスト内の数値を合計しています。

3.スペースで区切られた文字列

hello world japan のようなスペースで区切られた文字列が入力された場合、各単語を別々の行に表示するには、次の手順を実行します:

  1. 文字列をスペースで分割する。
  2. 分割された各単語を別々の行に表示する。

Pythonでこれを行うコードは以下のようになります

# 入力を受け取る
input_string = input("スペースで区切られた文字列を入力してください(例:hello world japan): ")

# 文字列をスペースで分割
words = input_string.split()

# 各単語を別々の行に表示
for word in words:
    print(word)

このコードでは、split() メソッドを使って入力された文字列をスペースで分割し、その後 for ループを使用して各単語を別々の行に表示しています。

複雑なユーザー入力を扱うシチュエーションでは、入力を検証したり、複数の入力を組み合わせたり、特定のフォーマットでの入力を要求したりすることがあります。
ここでは、ユーザーが複数の商品とそれぞれの数量を入力し、最終的に合計金額を計算するショッピングカートのプログラムを例に解説します。

# 商品と価格の辞書
products = {"りんご": 100, "バナナ": 150, "オレンジ": 200}

# ショッピングカート(商品名と数量)
cart = {}

while True:
    # 商品名の入力
    product_name = input("商品名を入力してください(終了するには'終了'と入力): ")
    if product_name == "終了":
        break  # ループを抜けて処理を終了
    
    # 商品名が辞書に存在するか確認
    if product_name not in products:
        print("その商品は存在しません。")
        continue
    
    # 数量の入力
    quantity = input(f"{product_name}の数量を入力してください: ")
    
    try:
        quantity = int(quantity)  # 数量を整数に変換
        if quantity <= 0:  # 数量が0以下の場合はエラー
            raise ValueError("数量は正の整数である必要があります。")
    except ValueError as e:  # 数量が整数でない場合のエラーハンドリング
        print(f"無効な入力: {e}")
        continue
    
    # ショッピングカートに商品と数量を追加
    if product_name in cart:
        cart[product_name] += quantity  # 既にカートにある商品の場合は数量を加算
    else:
        cart[product_name] = quantity  # 新しい商品の場合は辞書に追加

# 合計金額の計算
total_price = sum(products[product] * quantity for product, quantity in cart.items())

# 結果の出力
print("ショッピングカートの内容:")
for product, quantity in cart.items():
    print(f"{product}: {quantity}個")
print(f"合計金額: {total_price}円")

まず商品と価格の辞書を設定し、ユーザーに商品名と数量を入力してもらい、それをリストに保存します。このプロセスをユーザーが終了を選択するまで繰り返します。

入力された商品名が辞書 products に存在するかを確認し、数量が正の整数であるかを検証しています。すべての入力が完了した後に、各商品の価格を数量で乗算して合計金額を計算し、ショッピングカートの内容とともに出力しています。

記事