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

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

Към профила на Денис Бялев

Резултати

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

Код

def is_pangram(sentence):
bulgarian_alphabet="абвгдежзийклмнопрстуфхцшщъьюя"
return len([x for x in bulgarian_alphabet
if x not in sentence.lower()]) == 0
def sort_by(func, arguments):
for j in range(0, len(arguments) - 1):
for i in range(0, len(arguments) - 1):
if func(arguments[i], arguments[i + 1]) > 0:
arguments[i], arguments[i+1] = arguments[i+1], arguments[i]
return arguments
def anagrams(words):
list_anagrams, all_anagrams=[], []
for i in range(len(words)):
for j in range(len(words)):
if not ''.join([x for x in words[i].lower()
if words[i].lower().count(x)
!= words[j].lower().count(x)]).islower():
list_anagrams.append(words[j])
if list_anagrams not in all_anagrams:
all_anagrams.append(list_anagrams)
list_anagrams=[]
return all_anagrams
def char_histogram(text):
return {x:text.count(x) for x in text}
def group_by_type(dictionary):
return {type(x):{y:dictionary[y] for y in dictionary
if type(x) == type(y)} for x in dictionary}

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

................
----------------------------------------------------------------------
Ran 16 tests in 0.011s

OK

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

Денис обнови решението на 16.03.2014 17:15 (преди над 10 години)

+def is_pangram(sentence):
+ bg_alphabet="абвгдежзийклмнопрстуфхцшщъьюя"
+ return len([x for x in bg_alphabet if x not in sentence.lower()]) == 0
+
+def sort_by(func, arguments):
+ for j in range(0, len(arguments)-1):
+
+ for i in range(j+1, len(arguments)):
+ print(arguments)
+ if func(arguments[j], arguments[i]) > 0:
+ argument=arguments[j]
+ arguments[j]=arguments[i]
+ arguments[i]=argument
+ return arguments
+
+
+def anagrams(words):
+ list_anagrams, all_anagrams=[], []
+ for i in range(len(words)):
+ for j in range(len(words)):
+ if not ''.join([x for x in words[j].lower()
+ if x not in words[i].lower()]).islower():
+ list_anagrams.append(words[j])
+ if list_anagrams not in all_anagrams:
+ all_anagrams.append(list_anagrams)
+ list_anagrams=[]
+ return all_anagrams
+
+def char_histogram(text):
+ dict_histogram={}
+ for x in text:
+ if x in dict_histogram:
+ dict_histogram[x]+=1
+ else:
+ dict_histogram[x]=1
+ return dict_histogram
+
+def group_by_type(dictionary):
+ type_dictionary={}
+ for i in dictionary:
+ type_dictionary[type(i)]={x:dictionary[x] for x in dictionary
+ if type(x) == type(i)}
+ return type_dictionary
  • bulgarian_alphabet иначе чужденец няма да го разбере
  • ред 6 - интервали около оператора
  • ред 7 - не бих сложил празен ред, защото не разделяш вътрешния for от нищо, което да е смислово групирано
  • ред 9 - не оставяй print-ове
  • питонски swap - a, b = b, a
  • сортировката не ти е стабилна; тоест ако направим следното sort_by(lambda x, y: len(x) - len(y), ['a', 'ab', 'b', 'bc', 'c']) получаваме ['a', 'b', 'c', 'bc', 'ab']; 'ab' и 'bc' имат равни дължини и 'ab' беше преди 'bc' в несортирания списък, но сега не е; това означава сортировката да не е стабилна
  • не слагай типове в имената
  • char_histogram можеш да я подобриш като си прегледаш хитринките
  • в group_by_type има подравняване на dict comprehension, което не е правилно спрямо PEP8, и отново липсват интервали около операторите
  • можеш да се опиташ да подобриш и group_by_type с хитринките
  • премисли пак
if not ''.join([x for x in words[j].lower() 
                if x not in words[i].lower()]).islower():
    ...

доста време ми трябваше, за да разбера как работи и мисля, че не си искал да напишеш точно това условие; връзката се губи, когато всяко x се взима от words[j].lower(), тоест трябва да е lower и в следващия момент идва .islower(), което какво проверява при положение, че всичко в низа ще е lower

Денис обнови решението на 16.03.2014 22:21 (преди над 10 години)

def is_pangram(sentence):
- bg_alphabet="абвгдежзийклмнопрстуфхцшщъьюя"
- return len([x for x in bg_alphabet if x not in sentence.lower()]) == 0
+ bulgarian_alphabet="абвгдежзийклмнопрстуфхцшщъьюя"
+ return len([x for x in bulgarian_alphabet
+ if x not in sentence.lower()]) == 0
def sort_by(func, arguments):
- for j in range(0, len(arguments)-1):
-
- for i in range(j+1, len(arguments)):
- print(arguments)
- if func(arguments[j], arguments[i]) > 0:
- argument=arguments[j]
- arguments[j]=arguments[i]
- arguments[i]=argument
+ for j in range(0, len(arguments) - 1):
+ for i in range(0, len(arguments) - 1):
+ if func(arguments[i], arguments[i + 1]) > 0:
+ arguments[i], arguments[i+1] = arguments[i+1], arguments[i]
return arguments
-
def anagrams(words):
list_anagrams, all_anagrams=[], []
for i in range(len(words)):
for j in range(len(words)):
if not ''.join([x for x in words[j].lower()
if x not in words[i].lower()]).islower():
list_anagrams.append(words[j])
if list_anagrams not in all_anagrams:
all_anagrams.append(list_anagrams)
list_anagrams=[]
return all_anagrams
+
def char_histogram(text):
- dict_histogram={}
- for x in text:
- if x in dict_histogram:
- dict_histogram[x]+=1
- else:
- dict_histogram[x]=1
- return dict_histogram
+ return {x:text.count(x) for x in text}
def group_by_type(dictionary):
- type_dictionary={}
- for i in dictionary:
+ return {type(x):{y:dictionary[y] for y in dictionary
- type_dictionary[type(i)]={x:dictionary[x] for x in dictionary
+ if type(x) == type(y)} for x in dictionary}
- if type(x) == type(i)}
- return type_dictionary

Денис обнови решението на 16.03.2014 23:13 (преди над 10 години)

def is_pangram(sentence):
bulgarian_alphabet="абвгдежзийклмнопрстуфхцшщъьюя"
return len([x for x in bulgarian_alphabet
if x not in sentence.lower()]) == 0
def sort_by(func, arguments):
for j in range(0, len(arguments) - 1):
for i in range(0, len(arguments) - 1):
if func(arguments[i], arguments[i + 1]) > 0:
arguments[i], arguments[i+1] = arguments[i+1], arguments[i]
return arguments
def anagrams(words):
list_anagrams, all_anagrams=[], []
for i in range(len(words)):
for j in range(len(words)):
- if not ''.join([x for x in words[j].lower()
- if x not in words[i].lower()]).islower():
+ if not ''.join([x for x in words[i].lower()
+ if words[i].lower().count(x)
+ != words[j].lower().count(x)]).islower():
list_anagrams.append(words[j])
if list_anagrams not in all_anagrams:
all_anagrams.append(list_anagrams)
list_anagrams=[]
return all_anagrams
def char_histogram(text):
return {x:text.count(x) for x in text}
def group_by_type(dictionary):
return {type(x):{y:dictionary[y] for y in dictionary
if type(x) == type(y)} for x in dictionary}