Решение на Пет функции от Марианна Владимирова
Към профила на Марианна Владимирова
Резултати
- 6 точки от тестове
- 0 бонус точки
- 6 точки общо
- 9 успешни тест(а)
- 7 неуспешни тест(а)
Код
def is_pangram(sentance):
sentance_upper_case = sentance.upper()
letters_count = 0
letters = []
for letter in sentance_upper_case:
if (ord(letter) in range(1040, 1072) and
letter not in letters):
letters.append(letter)
return len(letters) == 30
def char_histogram(text):
chars_in_text = {}
for letter in text:
if letter not in chars_in_text:
chars_in_text[str(letter)] = 1
else:
chars_in_text[str(letter)] += 1
return chars_in_text
def group_by_type(dictionary):
grouped_by_type = {}
for x in dictionary.keys():
if type(x) not in grouped_by_type:
grouped_by_type[type(x)] = {x:dictionary[x]}
else:
grouped_by_type[type(x)].update({x:dictionary[x]})
return grouped_by_type
Лог от изпълнението
▸ Покажи логаИстория (10 версии и 3 коментара)
Марианна обнови решението на 17.03.2014 15:51 (преди около 11 години)
▸ Покажи разликите-
new_sentance
е лошо име, можеш да му дадеш име, което да обяснява какво си променила - Използвай повече
list comprehensions
и намали циклите
Марианна обнови решението на 18.03.2014 15:47 (преди около 11 години)
▸ Покажи разликитеМарианна обнови решението на 18.03.2014 17:44 (преди около 11 години)
▸ Покажи разликитеМарианна обнови решението на 18.03.2014 17:45 (преди около 11 години)
▸ Покажи разликитеМарианна обнови решението на 18.03.2014 17:51 (преди около 11 години)
▸ Покажи разликитеМарианна обнови решението на 18.03.2014 18:56 (преди около 11 години)
▸ Покажи разликитеМарианна обнови решението на 18.03.2014 19:43 (преди около 11 години)
▸ Покажи разликитеПоследната функция group_by_type има малък проблем, ако има два елемента на речника с ключ от един и същи тип ми връща само първия срещнат и следващият го пропуска. Някаква подсказка как да го оправя?
-
ами това е нормално по начина, по който си го написала. (за всеки елемент създаваш речник
{original_key: original_value}
като стойност зад ключoriginal_type
на външния. Няма да се акумулират така.- вариант 1: конструираш вътрешните речници така, че да обхваща всички двойки, които се очаква да са в него. Може би по-трудния и тромав вариант
- вариант 2: правиш го по малко по-процедурен начин, който ще ти е по-лесно да проследиш и да напишеш правилно :)
-
Не прави така:
if len(letters) == 30: return True else: return False
това е лошия вариант на
return len(letters) == 30
letters
речника изглежда излишно сложен, зле подравнен и съм сигурен, че можеш да измислиш нещо по-простичко, по-подходящо и по-лесно четимо на негово място. note: не говоря за името- В python предпочитаме "for each"-like итериране по колекции, когато не се налага нещо друго. Пример:
for item in my_collection:
е по-добре отfor index in range(len(my_collection))
. Случват се и изключения. Твоя случай от кои е?