03. Plant Discovery Python Problem
Здравейте група
Някой успя ли да реши тая задача?
Нещо ми куца и няколко дни ме мъчи  
Ето го кода ми.
https://pastebin.com/wPghrQ8U
Ето го и условието
https://judge.softuni.bg/Contests/Practice/Index/2518#2
Здравейте група
Някой успя ли да реши тая задача?
Нещо ми куца и няколко дни ме мъчи  
Ето го кода ми.
https://pastebin.com/wPghrQ8U
Ето го и условието
https://judge.softuni.bg/Contests/Practice/Index/2518#2
В решението забелязвам няколко пропуска:
- неправилно изчисляване на рейтинга (заради counter-а)
- не се отчита рейтинга при сортирането
- очаква се всяко растение да е получило поне един рейтинг
- не се извежда "error" при въвеждане на рейтинг за несъществуващо растение.
Това е модифицираното решение, като съм използвал помощен клас:
class Plant:
    def __init__(self, name, rarity):
        self.name = name
        self.rarity = rarity
        self.ratings = []
    def rating(self):
        if self.ratings:
            return sum(self.ratings) / len(self.ratings)
        return 0
plants = {}
n = int(input())
for num in range(n):
    token = input().split('<->')
    plant_name = token[0]
    plant_rarity = token[1]
    plants[plant_name] = Plant(plant_name, int(plant_rarity))
command = input()
while command != 'Exhibition':
    token_2 = command.split(': ')
    token_3 = token_2[1].split(' - ')
    plant_name = token_3[0]
    command_type = token_2[0]
    if plant_name not in plants:
        print('error')
    elif command_type == 'Rate':
        rating = token_3[1]
        plants[plant_name].ratings.append(int(rating))
    elif command_type == 'Update':
        new_rarity = int(token_3[1])
        plants[plant_name].rarity = new_rarity
    elif command_type == 'Reset':
        plants[plant_name].ratings.clear()
    else:
        print('error')
    command = input()
sorted_plants = sorted(plants.values(), key=lambda p: (p.rarity, p.rating()), reverse=True)
print(f'Plants for the exhibition:')
for plant in sorted_plants:
    print(f'- {plant.name}; Rarity: {plant.rarity}; Rating: {plant.rating():.2f}')
Благодаря много за отговора.
Възможно ли е да се напише само с речници?
Да, може да се реши и само с речници, но ще е с повече код, по-разхвърляна логика и повече места, на които може да се обърка нещо... Не се сещам за изчистено решение без клас, но и не пиша често на Python.
Да, благодаря много. На фундаменталс ниво сме още. Струва ми се че скоро като вземем класове и обекти ще е една идея по лесно.
Въпросът е от доста време, но ако някой друг се чуди за подход ( по съвпадащ с моментните знания на модула ) . Става доста лесно с два отделни речника за Rariry и Rating и за всяка операция си контролирате нужния речник. Кодът е ясен и кратък, надявам се.
Problem 3 - Plant Discovery - SoftUni - https://pastebin.com/Jcw6Mh2j