Решение на doge от Аделина Рудова

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

Към профила на Аделина Рудова

Резултати

  • 5 точки от тестове
  • 0 бонус точки
  • 5 точки общо
  • 7 успешни тест(а)
  • 8 неуспешни тест(а)

Код

PARASITE_WORDS = ("wow", "lol", "so", "such", "much", "very")
def wow_such_much(start, end):
return list(map(change_number, range(start, end)))
def change_number(number):
if number % 15 == 0:
return "suchmuch"
if number % 3 == 0:
return "such"
if number % 5 == 0:
return "much"
else:
return str(number)
def count_doge_words(sentence):
return (map(is_parasite, sentence.split())).count(True)
def is_parasite(word):
return word.lower() in PARASITE_WORDS

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

EEEEEEEE.......
======================================================================
ERROR: test_sentence_with_parasite_word_as_part_of_normal_one (test.TestDogeSay)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "lib/language/python/runner.py", line 60, in thread
    raise it.exc_info[1]
  File "lib/language/python/runner.py", line 48, in run
    self.result = func(*args, **kwargs)
  File "/tmp/d20141216-14586-1ddqgdg/test.py", line 52, in test_sentence_with_parasite_word_as_part_of_normal_one
    self.assertEqual(2, solution.count_doge_words("wow soon hard such difficult"))
  File "/tmp/d20141216-14586-1ddqgdg/solution.py", line 17, in count_doge_words
    return (map(is_parasite, sentence.split())).count(True)
AttributeError: 'map' object has no attribute 'count'

======================================================================
ERROR: test_sentence_without_slangs (test.TestDogeSay)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "lib/language/python/runner.py", line 60, in thread
    raise it.exc_info[1]
  File "lib/language/python/runner.py", line 48, in run
    self.result = func(*args, **kwargs)
  File "/tmp/d20141216-14586-1ddqgdg/test.py", line 49, in test_sentence_without_slangs
    self.assertEqual(0, solution.count_doge_words("The quick brown fox jumps over"))
  File "/tmp/d20141216-14586-1ddqgdg/solution.py", line 17, in count_doge_words
    return (map(is_parasite, sentence.split())).count(True)
AttributeError: 'map' object has no attribute 'count'

======================================================================
ERROR: test_with_empty_sentence (test.TestDogeSay)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "lib/language/python/runner.py", line 60, in thread
    raise it.exc_info[1]
  File "lib/language/python/runner.py", line 48, in run
    self.result = func(*args, **kwargs)
  File "/tmp/d20141216-14586-1ddqgdg/test.py", line 55, in test_with_empty_sentence
    self.assertEqual(0, solution.count_doge_words(""))
  File "/tmp/d20141216-14586-1ddqgdg/solution.py", line 17, in count_doge_words
    return (map(is_parasite, sentence.split())).count(True)
AttributeError: 'map' object has no attribute 'count'

======================================================================
ERROR: test_with_glued_parasite_words (test.TestDogeSay)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "lib/language/python/runner.py", line 60, in thread
    raise it.exc_info[1]
  File "lib/language/python/runner.py", line 48, in run
    self.result = func(*args, **kwargs)
  File "/tmp/d20141216-14586-1ddqgdg/test.py", line 61, in test_with_glued_parasite_words
    self.assertEqual(0, solution.count_doge_words('wowlolsosuchmuchvery'))
  File "/tmp/d20141216-14586-1ddqgdg/solution.py", line 17, in count_doge_words
    return (map(is_parasite, sentence.split())).count(True)
AttributeError: 'map' object has no attribute 'count'

======================================================================
ERROR: test_with_more_space_between_parasites (test.TestDogeSay)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "lib/language/python/runner.py", line 60, in thread
    raise it.exc_info[1]
  File "lib/language/python/runner.py", line 48, in run
    self.result = func(*args, **kwargs)
  File "/tmp/d20141216-14586-1ddqgdg/test.py", line 67, in test_with_more_space_between_parasites
    self.assertEqual(6, solution.count_doge_words('wow  lol    so  such   much      very'))
  File "/tmp/d20141216-14586-1ddqgdg/solution.py", line 17, in count_doge_words
    return (map(is_parasite, sentence.split())).count(True)
AttributeError: 'map' object has no attribute 'count'

======================================================================
ERROR: test_with_parasite_sentence (test.TestDogeSay)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "lib/language/python/runner.py", line 60, in thread
    raise it.exc_info[1]
  File "lib/language/python/runner.py", line 48, in run
    self.result = func(*args, **kwargs)
  File "/tmp/d20141216-14586-1ddqgdg/test.py", line 58, in test_with_parasite_sentence
    self.assertEqual(6, solution.count_doge_words('wow lol so such much very'))
  File "/tmp/d20141216-14586-1ddqgdg/solution.py", line 17, in count_doge_words
    return (map(is_parasite, sentence.split())).count(True)
AttributeError: 'map' object has no attribute 'count'

======================================================================
ERROR: test_with_repeating_parasite_words (test.TestDogeSay)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "lib/language/python/runner.py", line 60, in thread
    raise it.exc_info[1]
  File "lib/language/python/runner.py", line 48, in run
    self.result = func(*args, **kwargs)
  File "/tmp/d20141216-14586-1ddqgdg/test.py", line 64, in test_with_repeating_parasite_words
    self.assertEqual(5, solution.count_doge_words('wow hard wow much such difficult much'))
  File "/tmp/d20141216-14586-1ddqgdg/solution.py", line 17, in count_doge_words
    return (map(is_parasite, sentence.split())).count(True)
AttributeError: 'map' object has no attribute 'count'

======================================================================
ERROR: test_with_simple_sentence (test.TestDogeSay)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "lib/language/python/runner.py", line 60, in thread
    raise it.exc_info[1]
  File "lib/language/python/runner.py", line 48, in run
    self.result = func(*args, **kwargs)
  File "/tmp/d20141216-14586-1ddqgdg/test.py", line 46, in test_with_simple_sentence
    self.assertEqual(3, solution.count_doge_words("wow much hard such difficult"))
  File "/tmp/d20141216-14586-1ddqgdg/solution.py", line 17, in count_doge_words
    return (map(is_parasite, sentence.split())).count(True)
AttributeError: 'map' object has no attribute 'count'

----------------------------------------------------------------------
Ran 15 tests in 0.014s

FAILED (errors=8)

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

Аделина обнови решението на 06.03.2014 16:21 (преди над 10 години)

+def wow_such_much(start, end):
+ return list(map(change_number, range(start, end)))
+
+def change_number(number):
+ if divmod(number, 15)[1] == 0:
+ return "suchmuch"
+ if divmod(number, 3)[1] == 0:
+ return "such"
+ if divmod(number, 5)[1] == 0:
+ return "much"
+ else:
+ return str(number)
+
+def count_doge_words(sentence):
+ count = 0
+ for value in list(map(is_parasite, sentence.split())):
+ if value:
+ count += 1
+ return count
+
+def is_parasite(word):
+ return word in ["wow", "lol", "so", "such", "much", "very"]

Решението ти ми харесва, но има няколко дребни неща, които можеш да промениш, за да стане по-добро:

  • Погледни операторът % и виж дали не можеш да го използваш
  • Би могла да изнесеш списъка с думите в константа извън функцията като се съобразиш с конвенцията за имената на константите в Python

Сега ще погледна и ще го оправя :) Имам (поне) един въпрос засега: в Python съществува ли конвенцията имената на предикатите да завършват с въпросителна (например is_parasite?)? Вчера не можах да открия потвърждаваща или оборваща информация и реших да го оставя без въпросителна.

Edit: Също така, докато тествах вчера в интерактивната конзола, при изпълнение на map върху списък получавах резултат от рода (map object at 0x000000000296F978) - нещо грешно ли правя или това е нормалното поведение? Трябва ли да подам този резултат на list() или не? Защото сега тествах решението ми и пуснах тестовете с map(is_parasite, sentence.split()) вместо list(map(is_parasite, sentence.split())) и не получавам грешка.

Доста объркано стана, дано да се разбира какво точно питам. :smiley:

Edit 2: По-добре ли е в случая да използвам lambda функция: map(lambda word: word in PARASITE_WORDS, sentence.split()) или да оставя решението с дефинираната помощна?

Аделина обнови решението на 07.03.2014 10:39 (преди над 10 години)

+PARASITE_WORDS = ("wow", "lol", "so", "such", "much", "very")
+
def wow_such_much(start, end):
return list(map(change_number, range(start, end)))
def change_number(number):
- if divmod(number, 15)[1] == 0:
+ if number % 15 == 0:
return "suchmuch"
- if divmod(number, 3)[1] == 0:
+ if number % 3 == 0:
return "such"
- if divmod(number, 5)[1] == 0:
+ if number % 5 == 0:
return "much"
else:
return str(number)
def count_doge_words(sentence):
count = 0
- for value in list(map(is_parasite, sentence.split())):
+ for value in map(is_parasite, sentence.split()):
if value:
count += 1
return count
def is_parasite(word):
- return word in ["wow", "lol", "so", "such", "much", "very"]
+ return word in PARASITE_WORDS

Аделина обнови решението на 07.03.2014 11:00 (преди над 10 години)

PARASITE_WORDS = ("wow", "lol", "so", "such", "much", "very")
-
+
def wow_such_much(start, end):
return list(map(change_number, range(start, end)))
def change_number(number):
if number % 15 == 0:
return "suchmuch"
if number % 3 == 0:
return "such"
if number % 5 == 0:
return "much"
else:
return str(number)
def count_doge_words(sentence):
count = 0
for value in map(is_parasite, sentence.split()):
if value:
count += 1
return count
def is_parasite(word):
return word in PARASITE_WORDS

Добре си направила, в Python имената на пред икатите не завършват с въпросителна.

След прилагането на map не получаваш списък, а един специален вид обект, за който обаче можеш да използваш in, така че не е нужно да подаваш резултата на list().

Тъй като е кратка функция, би могла да използваш lambda, но лично на мен не ми пречи да е отделна функция.

Надявам се да съм те разбрала и да съм отговорила на въпросите ти :smile:

Аделина обнови решението на 08.03.2014 20:47 (преди над 10 години)

PARASITE_WORDS = ("wow", "lol", "so", "such", "much", "very")
def wow_such_much(start, end):
return list(map(change_number, range(start, end)))
def change_number(number):
if number % 15 == 0:
return "suchmuch"
if number % 3 == 0:
return "such"
if number % 5 == 0:
return "much"
else:
return str(number)
def count_doge_words(sentence):
count = 0
for value in map(is_parasite, sentence.split()):
if value:
count += 1
return count
def is_parasite(word):
- return word in PARASITE_WORDS
+ return word.lower() in PARASITE_WORDS

Аделина обнови решението на 12.03.2014 00:01 (преди над 10 години)

PARASITE_WORDS = ("wow", "lol", "so", "such", "much", "very")
def wow_such_much(start, end):
return list(map(change_number, range(start, end)))
def change_number(number):
if number % 15 == 0:
return "suchmuch"
if number % 3 == 0:
return "such"
if number % 5 == 0:
return "much"
else:
return str(number)
def count_doge_words(sentence):
- count = 0
- for value in map(is_parasite, sentence.split()):
- if value:
- count += 1
- return count
+ return (map(is_parasite, sentence.split())).count(True)
def is_parasite(word):
return word.lower() in PARASITE_WORDS