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