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の使い方かなと思います。
任意の回数だけループさせたい、みたいなときに、この形を使えばよいのかな?と思いました。
おわり