Решение на doge от Спасимир Тупаров

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

Към профила на Спасимир Тупаров

Резултати

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

Код

def wow_such_much(start, end):
numbers_and_doge_words = []
for e in range(start, end):
if start % 15 == 0:
numbers_and_doge_words.append("suchmuch")
elif start % 3 == 0:
numbers_and_doge_words.append("such")
elif start % 5 == 0:
numbers_and_doge_words.append("much")
else:
numbers_and_doge_words.append(str(start))
start += 1
return numbers_and_doge_words
def count_doge_words(sentence):
words_in_sentence = sentence.split()
doge_words = ["wow", "lol", "so", "such", "much", "very"]
result = 0
for word in doge_words:
result += words_in_sentence.count(word)
return result

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

...............
----------------------------------------------------------------------
Ran 15 tests in 0.007s

OK

История (5 версии и 8 коментара)

Спасимир обнови решението на 10.03.2014 14:14 (преди над 10 години)

+def wow_such_much(start, end):
+
+ if start > end:
+ return []
+
+ my_list = []
+ while not start == end:
+ if start % 3 == 0 and start % 5 == 0:
+ my_list.append("suchmuch")
+ elif start % 3 == 0:
+ my_list.append("such")
+ elif start % 5 == 0:
+ my_list.append("much")
+ else:
+ my_list.append(str(start))
+ start += 1
+
+ return my_list
+
+
+def count_doge_words( Sentence ):
+ ListWords = Sentence.split()
+
+ FirstTwo = ListWords.count("wow") + ListWords.count("lol")
+ SecondTwo = ListWords.count("so") + ListWords.count("such")
+ LastTwo = ListWords.count("much") + ListWords.count("very")
+
+ return FirstTwo + SecondTwo + LastTwo
  • Името my_list не е особено описателно
  • Виж конвенцията за именоване на променливи в Python
  • Нямаш нужда от проверката if start > end
  • Виж как можеш да направиш нещата по-добре с range
  • Можеш да избегнеш повторението на код във втората функция
  • Нямаш нужда от интервали в count_doge_words( Sentence )
  • Ако едно число се дели на 3 и на 5, то на колко се дели? :smile:

Спасимир обнови решението на 10.03.2014 18:12 (преди над 10 години)

def wow_such_much(start, end):
- if start > end:
- return []
-
- my_list = []
- while not start == end:
- if start % 3 == 0 and start % 5 == 0:
- my_list.append("suchmuch")
+ list_of_strings = []
+ for e in range(start, end):
+ if start % 15 == 0:
+ list_of_strings.append("suchmuch")
elif start % 3 == 0:
- my_list.append("such")
+ list_of_strings.append("such")
elif start % 5 == 0:
- my_list.append("much")
+ list_of_strings.append("much")
else:
- my_list.append(str(start))
+ list_of_strings.append(str(start))
start += 1
- return my_list
+ return list_of_strings
-def count_doge_words( Sentence ):
+def count_doge_words(Sentence):
+
ListWords = Sentence.split()
- FirstTwo = ListWords.count("wow") + ListWords.count("lol")
- SecondTwo = ListWords.count("so") + ListWords.count("such")
- LastTwo = ListWords.count("much") + ListWords.count("very")
+ Result = ListWords.count("wow") + ListWords.count("lol") \
+ + ListWords.count("so") + ListWords.count("such")\
+ + ListWords.count("much") + ListWords.count("very")
- return FirstTwo + SecondTwo + LastTwo
+ return Result

Надявам се, че сега е по-добре :)

На тестовете при този тест : def test_suchmuch_to_0(self): self.assertEqual(wow_such_much(1, 0), []) Без проверката "if start > end" (в миналия вариант на решението) се получава безкраен цикъл и затова я добавих... Сега с range няма проблем. :) Благодаря! Ако едно число се дели на 3 и на 5, то то се дели на 15 ! :D Благодаря за обърнатото внимание! :)

  • имена_на_променливи_и_аргументи_на_функции_в_пайтън_по_конвенция_са_lower_snake_case !!! @ http://legacy.python.org/dev/peps/pep-0008/#method-names-and-instance-variables

  • като оправиш имената, тук си плаче да използваш някоя удобна структура, която да обходиш, за да направиш всичките тези count-ове.

    Result = ListWords.count("wow") + ListWords.count("lol") \
          + ListWords.count("so") + ListWords.count("such")\
          + ListWords.count("much") + ListWords.count("very")
    

Спасимир обнови решението на 11.03.2014 14:41 (преди над 10 години)

def wow_such_much(start, end):
list_of_strings = []
for e in range(start, end):
if start % 15 == 0:
list_of_strings.append("suchmuch")
elif start % 3 == 0:
list_of_strings.append("such")
elif start % 5 == 0:
list_of_strings.append("much")
else:
list_of_strings.append(str(start))
start += 1
return list_of_strings
-def count_doge_words(Sentence):
+def count_doge_words(sentence):
- ListWords = Sentence.split()
+ sentence_as_list_of_words = sentence.split()
- Result = ListWords.count("wow") + ListWords.count("lol") \
- + ListWords.count("so") + ListWords.count("such")\
- + ListWords.count("much") + ListWords.count("very")
+ list_doge_words = ["wow"]
+ list_doge_words.append("lol")
+ list_doge_words.append("so")
+ list_doge_words.append("such")
+ list_doge_words.append("much")
+ list_doge_words.append("very")
- return Result
+ result = 0
+ for word in list_doge_words:
+ result += sentence_as_list_of_words.count(word)
+
+ return result

Спасимир обнови решението на 11.03.2014 21:51 (преди над 10 години)

def wow_such_much(start, end):
- list_of_strings = []
+ list_of_string_numbers_and_doge_words = []
for e in range(start, end):
if start % 15 == 0:
- list_of_strings.append("suchmuch")
+ list_of_string_numbers_and_doge_words.append("suchmuch")
elif start % 3 == 0:
- list_of_strings.append("such")
+ list_of_string_numbers_and_doge_words.append("such")
elif start % 5 == 0:
- list_of_strings.append("much")
+ list_of_string_numbers_and_doge_words.append("much")
else:
- list_of_strings.append(str(start))
+ list_of_string_numbers_and_doge_words.append(str(start))
start += 1
- return list_of_strings
+ return list_of_string_numbers_and_doge_words
def count_doge_words(sentence):
sentence_as_list_of_words = sentence.split()
-
- list_doge_words = ["wow"]
- list_doge_words.append("lol")
- list_doge_words.append("so")
- list_doge_words.append("such")
- list_doge_words.append("much")
- list_doge_words.append("very")
-
+ list_doge_words = ["wow", "lol", "so", "such", "much", "very"]
result = 0
+
for word in list_doge_words:
result += sentence_as_list_of_words.count(word)
- return result
+ return result

Все още можеш да поработиш над имената си.

Ако правиш списък, не е нужно той да се казва list_of_... и не е нужно да указваме типа на данните в него.

Защо list_of_string_numbers_and_doge_words да не е просто numbers_and_doge_words, а sentence_as_list_of_words да стане words?

Да глупаво ги кръщавам признавам си ...

Направих промените :) Промених sentence_as_list_of_words сега е words_of_sentence. В момента имам друга променлива word и ще е малко неприятно ... (колко добър би бил въпроса " кой го казва " в случая :D )

Благодаря най-вече за търпението Ви!

Лека вечер :)

Спасимир обнови решението на 12.03.2014 00:05 (преди над 10 години)

def wow_such_much(start, end):
- list_of_string_numbers_and_doge_words = []
+ numbers_and_doge_words = []
for e in range(start, end):
if start % 15 == 0:
- list_of_string_numbers_and_doge_words.append("suchmuch")
+ numbers_and_doge_words.append("suchmuch")
elif start % 3 == 0:
- list_of_string_numbers_and_doge_words.append("such")
+ numbers_and_doge_words.append("such")
elif start % 5 == 0:
- list_of_string_numbers_and_doge_words.append("much")
+ numbers_and_doge_words.append("much")
else:
- list_of_string_numbers_and_doge_words.append(str(start))
+ numbers_and_doge_words.append(str(start))
start += 1
- return list_of_string_numbers_and_doge_words
+ return numbers_and_doge_words
-
def count_doge_words(sentence):
- sentence_as_list_of_words = sentence.split()
- list_doge_words = ["wow", "lol", "so", "such", "much", "very"]
+ words_in_sentence = sentence.split()
+ doge_words = ["wow", "lol", "so", "such", "much", "very"]
result = 0
- for word in list_doge_words:
- result += sentence_as_list_of_words.count(word)
+ for word in doge_words:
+ result += words_in_sentence.count(word)
- return result
+ return result