Python programming - лекция 4, задача 2
Задача:
Използвайки кода си от предишната задача, и използвайки същите файлове, намерете средната цена от всички продукти в каталога, групирани по пол и възраст. Използвайте колоната за пол и възраст която има една от следните стойности:
– infant
- kid
- men
- unisex
- woman
Кратък текст: http://txs.io/MWPb
catalog = input('full or sample catalog? ')
if catalog == 'full':
address = '/home/alex/Documents/SoftUni/open_courses/python/lecture-4/catalog_full.csv'
else:
address = '/home/alex/Documents/SoftUni/open_courses/python/lecture-4/catalog_sample.csv'
def get_info(product: str, data: str):
holder = product.split(',')
#print(holder)
if data == 'price':
return float(holder[6])
else:
return holder[5]
highest = 0
highest_dup = 1
lowest = 0
lowest_dup = 1
sum = 0
counter = 0
targets = ['Men', 'Woman', 'Unisex', 'Kid', 'Infant']
line_num = 0
with open(address) as catalog:
for target in range(5):
for line in catalog:
print(line_num)
gender = get_info(catalog.readline(), 'target')
#print(gender)
if gender == targets[target]:
price = get_info(catalog.readline(), 'price')
# Refmoving the minimal and maximal values ( because why not )
if highest == 0 or lowest == 0:
highest = price
lowest = price
elif price > highest:
highest = price
highest_dup = 1
elif price < lowest:
lowest = price
lowest_dup = 1
elif price == highest:
highest_dup += 1
elif price == lowest:
lowest_dup += 1
sum += price
counter += 1
line_num += 1
print('{0:.2f}'.format((sum - highest_dup * highest - lowest_dup * lowest) / counter))
Като въведа 'full' работи. Тоест показва някакви стойности. Тези стойности обаче са подозрително еднакви (?). Също така, това аз виждам в конзолата ( защото съм въвел един тестов принт на номера на реда, през който итерирам в момента ) е 30567, при положение, че файлът има 61134 ( пак подозрително, това което виждам са точно половината редове ). Това може да е и от Pycharm, защото когато пробвам в интерактивната конзола на python си изписва всичките 61134. С две думи казано, не съм сигурен дали работи на 100%.
Същинския проблем, обаче се случва когато въведа нещо друго, тоест когато се опитам да работя с catalog_sample.csv.
Traceback (most recent call last):
File "/home/alex/Documents/SoftUni/open_courses/python/lecture-4/3.py", line 29, in <module>
gender = get_info(catalog.readline(), 'target')
File "/home/alex/Documents/SoftUni/open_courses/python/lecture-4/3.py", line 14, in get_info
return holder[5]
IndexError: list index out of range
Ей това не го разбирам. В началото имах подобен проблем, защото файла не беше наред. Използваше "," за десетични делители освен за разделянето на различните типове информация. След като редактирах файловете нещата се оправиха, но явно не съвсем.
Явно това се случва, благодаря. Това което всъщност трябва да се направи е за да подам реда като стринг параметър на функцията е:
Така си итерирам през целия файл. Освен това другият проблем беше с мястото на for цикъла за всеки отделен тип:
Трябва за всяка следваща итерация на целия файл да го отварям наново, иначе програмата си минава редовете през първия target цикъл и после само ми принтира същите сотйности отново.