n | | n | # ъпдейтнато решение, бях забравил да разгледам случая, при който се подават именувани аргументи в следния вид |
| | | # Пр. function_that_says_ni(1,2, name = "bush", cost = 1.20) |
| | | # В това, в което се подава няма речници, но в последствие name и cost отиват в речника kwargs |
| | | # и така дефакто имаме един речник, в който се описва храст, което е самия kwargs |
| | | # не съм поправял от нещата, които ми препоръчахте! |
| | | # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| def search_bush_in_dict(element): | | def search_bush_in_dict(element): |
| found_bush = False # да разберем дали вече сме намерили name храст | | found_bush = False # да разберем дали вече сме намерили name храст |
| sum_of_bush = 0 # сумата на храста в съответния dict | | sum_of_bush = 0 # сумата на храста в съответния dict |
| for key,value in element.items(): | | for key,value in element.items(): |
| if key == "name": | | if key == "name": |
| # понеже може да е нещо, което не е str, пък аз искам да използвам upper | | # понеже може да е нещо, което не е str, пък аз искам да използвам upper |
| value_str = str(value) | | value_str = str(value) |
| # понеже може да са в комбинация от малки/главни букви, ще използвам upper | | # понеже може да са в комбинация от малки/главни букви, ще използвам upper |
| if(value_str.upper() == "храст".upper() or value_str.upper() == "shrub".upper() or value_str.upper() == "bush".upper()): | | if(value_str.upper() == "храст".upper() or value_str.upper() == "shrub".upper() or value_str.upper() == "bush".upper()): |
| found_bush = True | | found_bush = True |
| continue | | continue |
| else: | | else: |
| # ако не е храст, понеже не може да има два еднакви ключа | | # ако не е храст, понеже не може да има два еднакви ключа |
| break | | break |
| # приемам, че в dictionary-то първо ще има name, а след това cost, иначе рискуваме да има cost но да няма name | | # приемам, че в dictionary-то първо ще има name, а след това cost, иначе рискуваме да има cost но да няма name |
| # затова е и проверката за found_bush | | # затова е и проверката за found_bush |
| elif key == "cost" and found_bush: | | elif key == "cost" and found_bush: |
| sum_of_bush = value | | sum_of_bush = value |
| break | | break |
| # Вращаме лист, съставен от това дали сме намерили храст + каква е цената му | | # Вращаме лист, съставен от това дали сме намерили храст + каква е цената му |
| # защото нз как да му отразя промяната в тва sum_costs (Пр. c++ style референция) | | # защото нз как да му отразя промяната в тва sum_costs (Пр. c++ style референция) |
n | return [found_bush, sum_of_bush] | n | return found_bush, sum_of_bush |
| | | |
| def function_that_says_ni(*args, **kwargs): | | def function_that_says_ni(*args, **kwargs): |
| set_unique = set() # да бутам различните букви от имената на именуваните | | set_unique = set() # да бутам различните букви от имената на именуваните |
| sum_costs = 0 # за цените | | sum_costs = 0 # за цените |
| for element in args: | | for element in args: |
| # проверявам дали са речници, иначе не ги гледаме | | # проверявам дали са речници, иначе не ги гледаме |
| if type(element) is dict: | | if type(element) is dict: |
| # ще гледам в съответния dict и ще търся храсти | | # ще гледам в съответния dict и ще търся храсти |
| result = search_bush_in_dict(element) # примерно [True, 1.20] | | result = search_bush_in_dict(element) # примерно [True, 1.20] |
| sum_costs += result[1] | | sum_costs += result[1] |
t | | t | # updated: 20.10.24 - 18:30 |
| | | # ако самия kwargs е във формата на речник, описващ храст |
| | | result = search_bush_in_dict(kwargs) |
| | | if result[0] == True: |
| | | sum_costs += result[1] |
| | | # край на update-a |
| | | # ако вътре в kwargs имаме речници, които описват храсти |
| for key, value in kwargs.items(): | | for key, value in kwargs.items(): |
| if type(value) is dict: | | if type(value) is dict: |
| result = search_bush_in_dict(value) | | result = search_bush_in_dict(value) |
| if result[0] == True: | | if result[0] == True: |
| sum_costs += result[1] | | sum_costs += result[1] |
| # сега да сложим буквите в множеството | | # сега да сложим буквите в множеството |
| for i in range(len(key)): | | for i in range(len(key)): |
| set_unique.add(key[i]) | | set_unique.add(key[i]) |
| unique_bukvi = len(set_unique) | | unique_bukvi = len(set_unique) |
| is_handsome = False | | is_handsome = False |
| if not (int(sum_costs) == 0) and unique_bukvi % int(sum_costs) == 0: | | if not (int(sum_costs) == 0) and unique_bukvi % int(sum_costs) == 0: |
| is_handsome = True | | is_handsome = True |
| if sum_costs < 42.00 and is_handsome: | | if sum_costs < 42.00 and is_handsome: |
| # round не работеше, затва пробвах тоя format | | # round не работеше, затва пробвах тоя format |
| return str(format(sum_costs,".2f")) + "лв" | | return str(format(sum_costs,".2f")) + "лв" |
| else: | | else: |
| return "Ni!" | | return "Ni!" |