#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
. Вы неправильно скопировали мой код?