Задача:
Напишите программу, которая проверяет, является ли слово, предоставленное в качестве аргумента Isomet. Изограмма - это слово, в котором никакая буква не встречается более одного раза.Определение того, является ли строка Isogram
Создайте метод is_isogram, который принимает один аргумент, слово для проверки, является ли это изограммой. Этот метод должен возвращать кортеж слова и логическое значение, указывающее, является ли это изограммой.
Если аргумент представлен пустой строкой, верните аргумент и False: (аргумент, False). Если предоставленный аргумент не является строкой, поднимите TypeError с сообщением «Аргумент должен быть строкой».
Пример:
is_isogram("abolishment")
Ожидаемый результат:
("abolishment", True)
Видимый тест
from unittest import TestCase
class IsogramTestCases(TestCase):
def test_checks_for_isograms(self):
word = 'abolishment'
self.assertEqual(
is_isogram(word),
(word, True),
msg="Isogram word, '{}' not detected correctly".format(word)
)
def test_returns_false_for_nonisograms(self):
word = 'alphabet'
self.assertEqual(
is_isogram(word),
(word, False),
msg="Non isogram word, '{}' falsely detected".format(word)
)
def test_it_only_accepts_strings(self):
with self.assertRaises(TypeError) as context:
is_isogram(2)
self.assertEqual(
'Argument should be a string',
context.exception.message,
'String inputs allowed only'
)
Мое решение:
def is_isogram(word):
if type(word) != str:
raise TypeError('Argument should be a string')
elif word == "":
return (word, False)
else:
word = word.lower()
for char in word:
if word.count(char) > 1:
return (word, False)
else:
return (word, True)
Но это функция отказывается пройти какой-то скрытый тест: что не так с моим решением? Есть ли еще один элегантный способ написания этой функции?
'r eturn (word, True) 'должен находиться вне цикла' for'. –
Пожалуйста, исправьте свой отступ в фрагменте кода – Sayse
Хотя это не вне темы, вы можете найти более конструктивную обратную связь по обзору кода SE (codereview.stackexchange.com) (поскольку ваш код работает в основном и только если не считать того, что предположительно является краевым случаем). – Jules