python изменяет значение при выполнении average

#python

#python

Вопрос:

В настоящее время я получаю среднее значение с изюминкой. Я усредняю товары, но если я вижу определенное название продукта, мне нужно посчитать это значение равным 3. Я не могу заставить это сработать. Ниже приведен мой код и XML-файл (сокращенный). В принципе, если цикл видит Tofu, количество должно быть перезаписано на 3, а не на 9 .. затем получите среднее значение.

 import xml.etree.ElementTree as ET
root = ET.ElementTree(file="nwind_medium.xml")

orders = root.findall("./orders")
quantityTotal = 0
for order in orders:
    orderdetails = order.findall("./orderdetails")
    for detail in orderdetails:
        productName = detail.findall("./products/productname")
        quantityNew = detail.findall("./quantity")
        if productName[0].text == "chang" or productName[0].text == "chai" or productName[0].text == "Tofus":
            quantityNew = 3;
        else: 
            quantityTotal  = float(quantityNew[0].text)
numberQuantity = len(orders)
 

вывести «Среднее количество товаров в заказе», округлить ((Количество / количество), 1)

 <?xml version="1.0"?>
-<nwind> -<orders another="Friday" orderid="10248"> -<customers> <companyname>Vins et alcools Chevalier</companyname> <customerid>VINET</customerid> </customers> -<orderdetails> -<products> <productid>72</productid> <productname>Mozzarella di Giovanni</productname> </products> <unitprice>34.8</unitprice> <quantity>5</quantity> -<suppliers> <supplierid>14</supplierid> <companyname>Formaggi Fortini s.r.l.</companyname> </suppliers> </orderdetails> -<orderdetails> -<products> <productid>11</productid> <productname>Queso Cabrales</productname> </products> <unitprice>14</unitprice> <quantity>12</quantity> -<suppliers> <supplierid>5</supplierid> <companyname>Cooperativa de Quesos 'Las Cabras'</companyname> </suppliers> </orderdetails> -<orderdetails> -<products> <productid>42</productid> <productname>Singaporean Hokkien Fried Mee</productname> </products> <unitprice>9.8</unitprice> <quantity>10</quantity> -<suppliers> <supplierid>20</supplierid> <companyname>Leka Trading</companyname> </suppliers> </orderdetails> </orders> -<orders orderid="10249"> -<customers> <companyname>Toms Spezialitaten</companyname> <customerid>TOMSP</customerid> </customers> -<orderdetails> -<products> <productid>14</productid> <productname>Tofus</productname> </products> <unitprice>18.6</unitprice> <quantity>9</quantity> -<suppliers> <supplierid>6</supplierid> <companyname>Mayumi's</companyname> </suppliers> </orderdetails> -<orderdetails> -<products> <productid>51</productid> <productname>Manjimup Dried Apples</productname> </products> <unitprice>42.4</unitprice> <quantity>40</quantity> -<suppliers> <supplierid>24</supplierid> <companyname>G'day, Mate</companyname> </suppliers> </orderdetails> </orders> -<orders orderid="10250"> -<customers> <companyname>Hanari Carnes</companyname> <customerid>HANAR</customerid> </customers> -<orderdetails> -<products> <productid>65</productid> <productname>Louisiana Fiery Hot Pepper Sauce</productname> </products> <unitprice>16.8</unitprice> <quantity>15</quantity> -<suppliers> <supplierid>2</supplierid> <companyname>New Orleans Cajun Delights</companyname> </suppliers> </orderdetails> -<orderdetails> -<products> <productid>41</productid> <productname>Jack's New England Clam Chowder</productname> </products> <unitprice>7.7</unitprice> <quantity>10</quantity> -<suppliers> <supplierid>19</supplierid> <companyname>New England Seafood Cannery</companyname> </suppliers> </orderdetails> -<orderdetails> -<products> <productid>51</productid> <productname>Manjimup Dried Apples</productname> </products> <unitprice>42.4</unitprice> <quantity>35</quantity> -<suppliers> <supplierid>24</supplierid> <companyname>G'day, Mate</companyname> </suppliers> </orderdetails> </orders> </nwind>
 

Комментарии:

1. Вы устанавливаете quantityNew = 3 , но затем суммируете quantityNew[0].text — это вообще работает?

2. Я бы сделал if productName[0].text == "chang" or ... : _quantity = 3; else: _quantity = float(quantityNew[0].text); quantityTotal = _quantity

3. @AdamSmith Кажется, что значение было изменено на ноль, а не на 3. Я получил результат 42.3. Оно должно быть 43.3. Спасибо

4. @user_new_in_python Я на 100% уверен, что опубликованный вами код либо не запускается, либо никогда не войдет в if блок. Если ваш код отличается, я не могу комментировать, но код, который вы опубликовали здесь, выдаст TypeError: 'int' object is not subscriptable , если какие-либо productName[0].text совпадения "chang", "chai", or "Tofus"

5. @AdamSmith Извините за это… Да, я знаю, что в том, который я опубликовал, будет отображаться ошибка, потому что я не уверен, как действовать с оператором else. Вот почему я оставил его пустым, чтобы получить предложение о том, что поместить. Я не был ясен в своем сообщении.

Ответ №1:

 import xml.etree.ElementTree as ET
root = ET.ElementTree(file="nwind_medium.xml")

orders = root.findall("./orders")
quantityTotal = 0
for order in orders:
    orderdetails = order.findall("./orderdetails")
    for detail in orderdetails:
        productName = detail.findall("./products/productname")
        quantityNew = detail.findall("./quantity")
        if productName[0].text == "chang" or productName[0].text == "chai" or productName[0].text == "Tofus":
            _quantity = 3
        else:
            _quantity = float(quantityNew[0].text)
        quantityTotal  = _quantity
numberQuantity = len(orders)
 

Комментарии:

1. Спасибо. Это работает после добавления переменной _quantity внутри цикла. Пожалуйста, обновите опубликованный ответ, тогда я приму его как решение. Еще раз спасибо 🙂

2. @user_new_in_python Я не понимаю — мой написанный код верен

3. @user_new_in_python я никогда не определяю quantity . Вы неправильно скопировали мой код?