Добавить строку и целое число из одной строки строки, сгенерированной распознавателем речи, в 2 отдельных списка

У меня есть строка из распознавателя речи, и значение случайное, но в той же форме (x, y... n)

MyOrder = 'orange 2 grape 3 apple 4 mango 5 banana 1'

Как добавить строку и целое число в отдельный список в правильном порядке, например MyOrder? или фильтровать x,y (string,int или наоборот) по этим строкам в одной строке, например:

fruit_cart = ['orange', 'grape', 'apple', 'mango', 'banana']
fruit_quantity = [2,3,4,5,1]

Я попытался добавить строку списка, используя условный оператор if, но порядок был не таким, как строка MyOrder.

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

Я новичок в питоне кстати

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
33
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема в вашем коде в том, что он будет работать в том же порядке, что и операторы ifs. Таким образом, яблоки всегда будут первыми, если они появляются в MyOrder, затем бананы, виноград и т. д. Вы хотите заполнить свои списки в порядке появления в MyOrder.

Я бы преобразовал строку в список и повторил список вместо использования операторов if. Для цен я бы определил словарь с ценой каждого фрукта. Вот как бы я это сделал:

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

Другие вопросы по теме