log = []
for i in range(3):
for j in range(3):
if i + j == 3:
log.append(f'hit {i} {j}')
break
else:
log.append(f'exhausted {i}')
continue
break
else:
log.append('outer exhausted')
assert log == ['exhausted 0', 'hit 1 2']
log = []
for i in range(2):
for j in range(2):
if i + j == 99:
break
else:
continue
break
else:
log.append('outer exhausted')
assert log == ['outer exhausted']
log = []
outer = 0
while outer < 3:
outer += 1
while False:
pass
else:
log.append(f'inner-else {outer}')
if outer == 2:
break
log.append('done')
assert log == ['inner-else 1', 'inner-else 2', 'done']
log = []
for i in range(3):
while False:
pass
else:
log.append(i)
continue
log.append('unreached')
assert log == [0, 1, 2]
def search(needle, haystack):
for item in haystack:
if item == needle:
return 'found'
else:
return 'missing'
assert search(2, [1, 2, 3]) == 'found'
assert search(9, [1, 2, 3]) == 'missing'
def count_down(n):
while n > 0:
n -= 1
if n == 99:
return 'impossible'
else:
return 'exhausted'
assert count_down(3) == 'exhausted'
log = []
try:
for i in range(2):
log.append(i)
else:
raise ValueError('from else')
except ValueError as e:
log.append(str(e))
assert log == [0, 1, 'from else']
log = []
for i in range(2):
pass
else:
try:
log.append('try')
finally:
log.append('finally')
assert log == ['try', 'finally']
log = []
for i in range(2):
for j in range(1):
log.append(f'inner {i} {j}')
else:
try:
break
finally:
log.append('finally')
log.append('unreached')
log.append('after')
assert log == ['inner 0 0', 'finally', 'after']
log = []
for i in range(3):
if i == 1:
continue
log.append(i)
else:
log.append('else')
assert log == [0, 2, 'else']