В вашей программе есть как минимум две ошибки:
curtime = time.strftime("%H")
...
for hour in range(int(s), int(f)):
nrt.append(hour)
# this is an inefficient synonym for
# nrt = range(int(s), int(f))
if curtime in nrt:
...
Во-первых, curtime - это строка, тогда как nrt - это список целых чисел. Python строго типизирован, поэтому они не являются взаимозаменяемыми и не будут равны:
'4' == 4 # False
'4' in [3, 4, 5] # False
Этот исправленный код решает эту проблему, а также более эффективен, чем создание списка и поиск в нем текущего часа:
cur_hour = time.localtime().tm_hour
if int(s) <= cur_hour < int(f):
# You can "chain" comparison operators in Python
# so that a op1 b op2 c is equivalent to a op1 b and b op2c
...
Вторая проблема, которую вышеупомянутые проблемы не решают, заключается в том, что ваша программа не будет вести себя должным образом, если часы приближаются к полуночи (например, s = 22 и f = 8).
Ни одна из этих проблем не обязательно связана с тем, что «скрипт заканчивает цикл только через одну из строк», но вы не предоставили нам достаточно информации, чтобы выяснить, почему это может быть. Более полезный способ задать вопросы - опубликовать краткий , но полный фрагмент кода, который показывает поведение, которое вы наблюдаете, а также образец ввода и полученные сообщения об ошибках, если таковые имеются (вместе с с трассировкой).