assert'ы после циклов обозначают нечёткую формулировку инварианта. при хорошем коде циклне можетзавершиться так, чтобы последующий assert провалился.

проще говоря, сам цикл и является сторожем-проверкой. если он эту роль не выполняет, или выполняет неочевидно — в коде что-то очень плохо, и надо чинить цикл, а не подпирать его сторожами.