Рубрики
Без рубрики

Изограммы

Описание задания Исомия – это слово, которое не имеет повторяющихся букв, подряд или не-C … Tagged Cata, Challenge, Codewars, Python.

KATAS и вызовы (13 частей серии)

Описание задания

Изограмма – это слово, которое не имеет повторяющихся букв, последовательных или не подряд. Реализуйте функцию, которая определяет, содержит ли строка, которая содержит только буквы, представляет собой изограмму. Предположим, пустая строка – это изоляция. Игнорировать букв дело.

Isisogram ("дерматоглифы") Возвращает правда Isisogram («АБА») Возвращает ложь Isisogram («лосью») Возвращает ложный

Задача решение

Тесты

Использование Pytest Framework Мы напишем тесты, чтобы покрыть следующие случаи:

  1. Делает Типеррр Поднять для неверного ввода
  2. Сделайте нижний регистр, верхний регистр и смешанные строки корпуса, как и ожидалось?
  3. Что, если предоставляется пустая строка?

Эти условия приходится, тесты следующие:

import pytest;
from isograms import is_isogram; # ./isograms.py

def invalid_input_throws():
  with pytest.raises(TypeError):
    is_isogram(1);

def happy_path_tests():
  assert is_isogram("Dermatoglyphics") == True;
  assert is_isogram("isogram") == True;
  assert is_isogram("aba") == False;
  assert is_isogram("moOse") == False;
  assert is_isogram("isIsogram") == False;
  assert is_isogram("") == True;

Реализация

Первоначально я пошел на простой подход, в результате чего я добавляю каждый символ в переменную кэш Отказ Отсюда я петлю по строке и для каждого символа в строке я преобразую его в нижний регистр, и если это не в кэш, мы добавляем его, в противном случае, если оно уже в кэше, это не может быть изоляции и, следовательно, мы вернуть Ложь Отказ Естественно, если контур заканчивается без возврата, мы возвращаем Правда Поскольку он должен быть isoRaster. Реализация сначала была такой:

def is_isogram(string: str) -> bool:
    cache = {};
    for char in string:
        lowerChar = char.lower();
        if not lowerChar in cache: cache[lowerChar] = True;
        else: return False;
    return True;

Эта реализация в основном кода псевдо-код, но мы можем сделать лучше. Так как мы накрыли красные и зеленые части Красный, зеленый, рефтекторный цикл , настало время для рефакторов. Для этого я реализовал следующее:

def is_isogram(string: str) -> bool:
  characters = [char.lower() for char in string];
  uniqueCharacters = set(characters);
  return True if len(characters) == len(uniqueCharacters) else False;

Эта реализация делает точно такой же, как первая версия, но в половине выложена кода. Я также думаю, что это немного более читаемый лично. Короче говоря, мы создаем персонажи Массив состоит из нижних оборудованных символов в входной строке. Далее мы преобразуем массив на набор, если вы никогда не использовали набор раньше, он в основном просто коллекция или уникальные значения и в этом случае, это означает, что если наш массив имеет дублирующие значения, они будут удалены. Наконец, мы делаем именно в качестве последней строки функции: если персонажи Массив такая же длина, как UniqueChisters установить, то это должно быть изограм и мы должны вернуть Правда Отказ В противном случае верните Ложь Потому что это не может быть изограмма в первую очередь.

Выводы

Python – это язык, у меня есть отношения любви/ненависти, но одна вещь, которую я люблю в том, что это выразительный язык. Я особенно люблю то, как вы можете писать условные условные, такие как тот, который мы имеем в рекакторе, которые настолько читаются человеком, что ее почти глупо. На оборотной стороне модульная система и несогласованность деталей реализации языков несколько разыскивают мне, но в целом это мощный язык с хорошим сообществом.

Задача под рукой была довольно проста для разрешения, но мне понравилось завершение, тем не менее, особенно когда у меня было шанс посмотреть в Библиотека Timeit для тестов времени исполнения И мог видеть некоторую изменчивость в скорости на каждом прогоне, но почти во всех случаях оба реализация были довольно близко, обычно 7 секунд до 8 секунд, чтобы запускать каждую версию 1000,0000 раз.

Увидимся в следующем!

KATAS и вызовы (13 частей серии)

Оригинал: “https://dev.to/jamesrweb/kata-isograms-pkg”