I have some string from speech recognizer and the value is random but in the same form (x,y...n)
MyOrder = 'orange 2 grape 3 apple 4 mango 5 banana 1'
How to add string and integer into separate list in the correct order like MyOrder? or to filter x,y (string,int or vice versa) along those strings in one line for e.g:
fruit_cart = ['orange', 'grape', 'apple', 'mango', 'banana']
fruit_quantity = [2,3,4,5,1]
I tried to add the list string using conditional if statement, but the order were not the same as MyOrder string.
import numpy as np
import re
import speech_recognition as sr
fruit_cart = []
fruit_quantity = []
fruit_price = []
gross_price = []
recognizer = sr.Recognizer()
with sr.Microphone() as source2:
recognizer.adjust_for_ambient_noise(source2, duration=0.9)
audio2 = recognizer.listen(source2)
MyOrder = recognizer.recognize_google(audio2)
MyOrder = MyOrder.lower()
print("You said: " MyOrder)
if "apple" in(MyOrder) :
fruit_cart.append("apple")
fruit_price.append(5)
if "banana" in(MyOrder) :
fruit_cart.append("banana")
fruit_price.append(7)
if "grape" in (MyOrder):
fruit_cart.append("grape")
fruit_price.append(9)
if "mango" in (MyOrder):
fruit_cart.append("mango")
fruit_price.append(6)
if "orange" in (MyOrder):
fruit_cart.append("orange")
fruit_price.append(8)
q = [int(x) for x in re.findall('(\d )', MyOrder)]
fruit_quantity.extend(q)
total_fruit = len(fruit_cart)
print(fruit_cart)
print(fruit_quantity)
print(fruit_price)
print(total_fruit)
gross_price = np.multiply(fruit_quantity,fruit_price)
total_price = 0
for b in range(total_fruit):
print("%i \t %s\t %s \t\t%i\t\t %i" % (b 1, fruit_cart[b], fruit_price[b], fruit_quantity[b], gross_price[b]))
total_price = total_price gross_price[b]
tax = total_price * 10/100
final_price = total_price tax
I'm new to python by the way
CodePudding user response:
The problem in your code is that it will work in the same order than the ifs statements. So apples will always be first if they appear inMyOrder
, then banana, grape, etc. You want to fill your lists it in order of appearence in MyOrder
.
I would convert the string into a list and iterate the list instead of using if statements. For the prices, I would define a dictionary with the price of each fruit. Here's how I would do it:
prices = {"apple": 5, "banana": 7, "grape": 9, "mango": 6, "orange": 8}
with sr.Microphone() as source2:
recognizer.adjust_for_ambient_noise(source2, duration=0.9)
audio2 = recognizer.listen(source2)
MyOrder = recognizer.recognize_google(audio2)
MyOrder = MyOrder.lower()
print("You said: ", MyOrder)
word_list = MyOrder.split(" ")
fruit_cart = word_list[::2]
fruit_quantity = [int(n) for n in word_list[1::2]]
fruit_price = [prices[fruit] for fruit in fruit_cart]
total_fruit = len(fruit_cart)
gross_price = np.multiply(fruit_quantity,fruit_price)
total_price = 0
for b in range(total_fruit):
print("%i \t %s\t Rp %s \t\t%i\t\t Rp %i" % (b 1, fruit_cart[b], fruit_price[b], fruit_quantity[b], gross_price[b]))
total_price = total_price gross_price[b]
tax = total_price * 10/100
final_price = total_price tax