Спасимир обнови решението на 19.03.2014 02:00 (преди над 10 години)
+def is_pangram(sentence):
+
+ copy_sentence = sentence.lower()
+ bulgarian_charss = [chr(x) for x in range(ord('а'), ord('я')+1)]
+ bulgarian_charss.pop(-3)
+ bulgarian_charss.pop(-4)
+
+ encountered_symbols = {}
+
+ for symbol in bulgarian_charss:
+ if symbol in copy_sentence:
+ encountered_symbols[symbol] = 1
+
+ return len(encountered_symbols) == len(bulgarian_charss)
+
+
+def char_histogram(text):
+
+ symbols_and_encounters = {}
+ for symbol in text:
+ if symbol in symbols_and_encounters:
+ symbols_and_encounters[symbol] += 1
+ else:
+ symbols_and_encounters[symbol] = 1
+
+ return symbols_and_encounters
+
+
+def group_by_type(dictionary):
+ result = {}
+ for e in dictionary:
+ if type(e) not in result:
+ result[type(e)] = {e: dictionary[e]}
+
+ elif type(e) in result:
+ result[type(e)][e] = dictionary[e]
+
+ return result
+
+
+def sort_by(func, arguments):
+ result = arguments
+ for i in range(1, len(result)):
+ val = result[i]
+ j = i - 1
+
+ while (j >= 0) and func(result[j], val) > 0:
+ result[j+1] = result[j]
+ j = j - 1
+ result[j+1] = val
+ return result
+
+
+def anagrams(words):
+
+ result = []
+ temp = []
+
+ for firs_word in words:
+ temp = []
+ firs_word_histogramed = char_histogram(firs_word.upper())
+ for nth_word in words:
+ nth_word_histogramed = char_histogram(nth_word.upper())
+ flag = False
+ for symbol in firs_word_histogramed:
+ if not symbol.isalpha():
+ continue
+ if symbol in nth_word_histogramed and\
+ nth_word_histogramed[symbol] ==\
+ firs_word_histogramed[symbol]:
+ flag = True
+ else:
+ flag = False
+ break
+ if flag:
+ for symbol_two in firs_word_histogramed:
+ if not symbol_two.isalpha():
+ continue
+ if symbol_two in nth_word_histogramed and\
+ firs_word_histogramed[symbol_two]\
+ == nth_word_histogramed[symbol_two]:
+ flag = True
+ else:
+ flag = False
+ break
+ if flag:
+ temp.append(nth_word)
+ if temp != [] and temp not in result:
+ result.append(temp)
+ return result
- не оставяй празни редове след заглавието на функция
-
copy_sentence
в случая не е много удачно, защото ти не правиш копие на изречението, а lowercase копие; а и ползвашcopy_sentence
само на едно място, така че просто на това място използвайsentence.lower()
-
bulgarian_charss
има правописна грешка ->chars
; дори и да я нямаше пак по-добре еbulgarian_characters
; това, което си направил на тези 3 реда с това име става по-разбираемо на 1:bulgarian_alphabet = 'абвгде ...'
; можеш и да гоcast
-неш къмlist
, ако толкова искаш - в
is_pangram
не трябва да има значение дали буквите са малки или големи - ако имашA
трябва да го броиш като срещане наa
- прегледай хитринктие и
char_histogram
иgroup_by_type
ще ги направиш по-добре -
temp
е кофти име -
anagrams
е прекалено тлъста функция, опитай се да я разбиеш на по-малки функции; като цяло много прилича на C решение с тези флагове иbreak
-ове - ако условието ти в
if
,for
илиwhile
стане дълго за един ред не използвай\
, a просто обвий условието със скоби()
; например
if (symbol_two in nth_word_histogramed and
firs_word_histogramed[symbol_two] ==
nth_word_histogramed[symbol_two]):
...
-
firs_word_histogramed
first