Решение на Пет функции от Венцислав Велков

Обратно към всички решения

Към профила на Венцислав Велков

Резултати

  • 10 точки от тестове
  • 0 бонус точки
  • 10 точки общо
  • 16 успешни тест(а)
  • 0 неуспешни тест(а)

Код

import functools
import itertools
import string
def is_pangram(sentence):
ALPHABET = set('абвгдежзийклмнопрстуфхшщчцъьюя')
for char in sentence.lower():
if char in ALPHABET:
ALPHABET.remove(char)
return len(ALPHABET) == 0
def char_histogram(text):
return {char: text.count(char) for char in set(text)}
def sort_by(func, arguments):
arguments_copy = list(arguments)
arguments_copy.sort(key=functools.cmp_to_key(func))
return arguments_copy
def group_by_type(dictionary):
types = set(map(type, dictionary))
return {t: {key: dictionary[key] for key in dictionary if type(key) == t}
for t in types}
def anagrams(words):
anagram_groups = itertools.groupby(sorted(words, key=letters), letters)
return [list(group[1]) for group in anagram_groups]
def letters(word):
return sorted(filter(is_letter, word.lower()))
def is_letter(char):
CYRILLIC = 'абвгдежзийклмнопрстуфхшщчцъьюя'
return char in string.ascii_letters or char in CYRILLIC

Лог от изпълнението

................
----------------------------------------------------------------------
Ran 16 tests in 0.008s

OK

История (4 версии и 3 коментара)

Венцислав обнови решението на 16.03.2014 23:16 (преди над 10 години)

+def is_pangram(sentence):
+ alphabet = set('абвгдежзийклмнопрстуфхшщчцъьюя')
+ for char in sentence.lower():
+ if char in alphabet:
+ alphabet.remove(char)
+ return len(alphabet) == 0
+
+def char_histogram(text):
+ return {char: text.count(char) for char in set(text)}
+
+import functools
+def sort_by(func, arguments):
+ arguments_copy = list(arguments)
+ arguments_copy.sort(key=functools.cmp_to_key(func))
+ return arguments_copy
+
+def group_by_type(dictionary):
+ types = set(map(type, dictionary))
+ return {t: {key: dictionary[key] for key in dictionary if type(key) == t} for t in types}
+
+import itertools
+import string
+def anagrams(words):
+ anagram_groups = itertools.groupby(sorted(words, key=letters), letters)
+ return [list(group[1]) for group in anagram_groups]
+
+def letters(word):
+ return sorted(filter(lambda c: c in string.ascii_letters, word.lower()))
  • Импортите е добре да са в най-горната част на файла.
  • Между функциите трябва да има 2 реда разстояние по PEP8.
  • alphabet може да бъде константа.
  • На 19-ти ред не спазваш ограничението за максимална дължина на реда.

Венцислав обнови решението на 17.03.2014 13:43 (преди над 10 години)

+import functools
+import itertools
+import string
+
+
def is_pangram(sentence):
- alphabet = set('абвгдежзийклмнопрстуфхшщчцъьюя')
+ ALPHABET = set('абвгдежзийклмнопрстуфхшщчцъьюя')
for char in sentence.lower():
- if char in alphabet:
- alphabet.remove(char)
- return len(alphabet) == 0
+ if char in ALPHABET:
+ ALPHABET.remove(char)
+ return len(ALPHABET) == 0
+
def char_histogram(text):
return {char: text.count(char) for char in set(text)}
-import functools
+
def sort_by(func, arguments):
arguments_copy = list(arguments)
arguments_copy.sort(key=functools.cmp_to_key(func))
return arguments_copy
+
def group_by_type(dictionary):
types = set(map(type, dictionary))
return {t: {key: dictionary[key] for key in dictionary if type(key) == t} for t in types}
-import itertools
-import string
+
def anagrams(words):
anagram_groups = itertools.groupby(sorted(words, key=letters), letters)
return [list(group[1]) for group in anagram_groups]
+
def letters(word):
return sorted(filter(lambda c: c in string.ascii_letters, word.lower()))

Мерси за инфото, а относно дългия ред ( бившия 19ти, настоящия 26ти ) - как е по-добре да го оправя ? Като изнеса някаква част на нов ред ( в такъв случай, коя ) или като го направя по нормалния многоредов начин с един for ?

Да, трябва да се изнесе определена част на нов ред.

return {t: {key: dictionary[key] for key in dictionary if type(key) == t}
        for t in types}

По този начин става ясно, че {for t in types} се отнася за външния dictionary comprehension, а и конвенцията е спазена.

Венцислав обнови решението на 17.03.2014 23:12 (преди над 10 години)

import functools
import itertools
import string
def is_pangram(sentence):
ALPHABET = set('абвгдежзийклмнопрстуфхшщчцъьюя')
for char in sentence.lower():
if char in ALPHABET:
ALPHABET.remove(char)
return len(ALPHABET) == 0
def char_histogram(text):
return {char: text.count(char) for char in set(text)}
def sort_by(func, arguments):
arguments_copy = list(arguments)
arguments_copy.sort(key=functools.cmp_to_key(func))
return arguments_copy
def group_by_type(dictionary):
types = set(map(type, dictionary))
- return {t: {key: dictionary[key] for key in dictionary if type(key) == t} for t in types}
+ return {t: {key: dictionary[key] for key in dictionary if type(key) == t}
+ for t in types}
def anagrams(words):
anagram_groups = itertools.groupby(sorted(words, key=letters), letters)
return [list(group[1]) for group in anagram_groups]
def letters(word):
- return sorted(filter(lambda c: c in string.ascii_letters, word.lower()))
+ return sorted(filter(lambda c: c in string.ascii_letters, word.lower()))

Венцислав обнови решението на 18.03.2014 14:33 (преди над 10 години)

import functools
import itertools
import string
def is_pangram(sentence):
ALPHABET = set('абвгдежзийклмнопрстуфхшщчцъьюя')
for char in sentence.lower():
if char in ALPHABET:
ALPHABET.remove(char)
return len(ALPHABET) == 0
def char_histogram(text):
return {char: text.count(char) for char in set(text)}
def sort_by(func, arguments):
arguments_copy = list(arguments)
arguments_copy.sort(key=functools.cmp_to_key(func))
return arguments_copy
def group_by_type(dictionary):
types = set(map(type, dictionary))
return {t: {key: dictionary[key] for key in dictionary if type(key) == t}
for t in types}
def anagrams(words):
anagram_groups = itertools.groupby(sorted(words, key=letters), letters)
return [list(group[1]) for group in anagram_groups]
def letters(word):
- return sorted(filter(lambda c: c in string.ascii_letters, word.lower()))
+ return sorted(filter(is_letter, word.lower()))
+
+
+def is_letter(char):
+ CYRILLIC = 'абвгдежзийклмнопрстуфхшщчцъьюя'
+ return char in string.ascii_letters or char in CYRILLIC