BroCode氏のYouTubeで引き続きPythonのBasicを学んでいます。

その中で出てくるエキササイズにShopping cart programを作ろう、というものがあります。

以下が、エキササイズで作ったコード。

────────────────

# Shopping cart program

foods = []
prices = []
total = 0

while True:
    food = input("Enter a food to buy (q to quit)")
    if food.lower() == "q":
        break
    else:
        price = float(input(f"Enter the price of a {food}: $"))
        foods.append(food)
        prices.append(price)

print("----- YOUR CART -----")

for food in foods:
    print(food, end="")

for price in prices:
    total += price

print()
print(f"Your total is: ${total}")

────────────────

で、僕としては以下のような点を加えてブラッシュアップをしたいなあ、と思いました。

・ユーザーに何点商品を買いたいのかを問う

・その商品点数分だけ、FoodとPriceを打ち込んでもらう

TryとExceptでまずは「何点買いたいのかを聞く」はできそう。

しかし、「その商品点数分だけ、FoodとPriceを打ち込んでもらう」という点で、僕はつまづきました・・・。

つまづいた時点でのコードは下記のものです。どのように修正すればよいでしょう?

────────────────

# Shopping cart program

foods = []
prices = []
total = 0

# Ask the user how many items he/she is planning to buy
while True:
    try:
        item_numbers = int(input("How many items are you gonna buy?: "))
        print("Alright, move on to entering foods you are gonna buy!")
        break
    except ValueError:
        print("Please enter a valid number.")

while True:
    food = input("Enter a food to buy (q to quit): ")
    food_count = food.count
    if food.lower() == "q":
        break
    else:
        price = float(input(f"Enter the price of a {food}: $"))
        foods.append(food)
        prices.append(price)
print(f"{food_count}")

print("----- YOUR CART -----")

for food in foods:
    print(food, end=", ")

for price in prices:
    total += price

print()
print(f"Your total is: ${total}")

────────────────

 

以下が、ChatGPT大先生にやりたいことを相談してできあがったコードです。

────────────────

# Shopping cart program

foods = []
prices = []
total = 0

# Ask the user how many items he/she is planning to buy
while True:
    try:
        item_numbers = int(input("How many items are you going to buy?: "))
        print("Alright, let's move on to entering the foods you want to buy!")
        break
    except ValueError:
        print("Please enter a valid number.")

for i in range(item_numbers):
    while True:
        food = input(f"Enter food item no.{i+1}: ").strip()
        if food.isalpha():
            break
        else:
            if food == "":
                print("Food name can't be empty. Try again.")
            else:
                print("Food name can't contain numbers or special characters. Try again.")

    while True:
        try:
            price = float(input(f"Enter the price of {food}: $"))
            foods.append(food)
            prices.append(price)
            break
        except ValueError:
            print("Please enter a valid price.")

print("\n----- YOUR CART -----")

for food in foods:
    print(food, end=", ")

total = sum(prices)
print(f"\nYour total is: ${total:.2f}")
────────────────

これで、

・いくつアイテムを買いたいのかを聞き、

・そのアイテムの数だけ、食べ物の名称と値段をユーザーに入力してもらう

ようになりました。

今回の学びとしては、

for i in range(item_numbers):

の箇所でのforとrangeの使い方かなと思います。

任意の回数だけループさせたい、みたいなときに、この形を使えばよいのかな?と思いました。

おわり

 

投稿者 YOHEY_mk

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA