Вы можете получить самое длинное слово в списке слов с помощью max()
и снабдить ключевую функцию len
.
Вы можете создать еще один блок для «пустых» слов и отсортировать все ваши слова в сегменты, используя цикл for и индексируя в свои сегменты с помощью len(word)
:
# create some demo strings and add some other words
words = [ str(10**k) for k in range(10)]
words.extend(["this","should","work","out","somehow"])
print(words) # ['1', '10', '100', '1000', '10000', '100000', '1000000', '10000000',
# '100000000', '1000000000', 'this', 'should', 'work', 'out', 'somehow']
longest = len(max(words,key=len)) # get the length of the longest word
# create a empty bucket for "" and one bucket for length 1 up to longest
bins = [None] + [ [] for _ in range(longest+1)]
# loop over words and put then in the bin at index len(word)
for w in words:
bins[len(w)].append(w)
print(bins)
Вывод:
[None, ['1'], ['10'], ['100', 'out'], ['1000', 'this', 'work'], ['10000'],
['100000', 'should'], ['1000000', 'somehow'], ['10000000'],
['100000000'], ['1000000000']]
Доку:
Мне никогда не нравился способ утверждать исключения с Junit. Если я использую "ожидаемый" в аннотации, кажется с моей точки зрения, которую мы нарушаем "данный, когда, то" шаблон, потому что "затем" помещается наверху тестового определения.
кроме того, если мы используем "@Rule", мы должны иметь дело с таким большим количеством шаблонного кода. Так, если бы можно установить новые библиотеки для тестов, я предложил бы взглянуть к AssertJ (что библиотека теперь идет с SpringBoot)
Затем тест, который не нарушает "given/when/then" принципы, и она сделана с помощью AssertJ для проверки:
1 - исключение - то, что мы ожидаем. 2 - Это имеет также ожидаемое сообщение
, будет похож на это:
@Test
void should_throwIllegalUse_when_idNotGiven() {
//when
final Throwable raisedException = catchThrowable(() -> getUserDAO.byId(null));
//then
assertThat(raisedException).isInstanceOf(IllegalArgumentException.class)
.hasMessageContaining("Id to fetch is mandatory");
}
Обязательно ли использовать @Test(expected=SomeException.class)
? Когда нам нужно утверждать фактическое сообщение об исключении, мы делаем вот что.
@Test
public void myTestMethod()
{
try
{
final Integer employeeId = null;
new Employee(employeeId);
fail("Should have thrown SomeException but did not!");
}
catch( final SomeException e )
{
final String msg = "Employee ID is null";
assertEquals(msg, e.getMessage());
}
}