Как вы, наверное, знаете, ключевое слово break
выходит из текущего l oop. Это означает, что вы должны писать его только в той точке кода, где l oop достигло того, чего вы хотели.
В этом l oop вы хотите получить число от пользователя между 0 и 86399, поэтому вы не должны break
, пока не определите число в этом диапазоне. При чтении и написании кода полезно подумать о том, что «известно» на каждом этапе кода: я прокомментировал код ниже, чтобы сказать, что «известно» на каждом этапе.
while True:
try:
# at this line, we know nothing
inputSeconds = int(input("♡ Seconds: "))
# at this line, we know that int worked, so inputSeconds is a number.
break
except ValueError:
# at this line, we know that int didn't work, so we don't have a number.
print("Please enter a valid integer.")
else:
# this line will never be reached, because of the break at the end of
# the try block.
if 0 <= inputSeconds <= 86399:
break
else:
print("Please enter a value between 0 and 86399.")
# at this line, the loop stopped because of the break statement in the try block,
# so we know what we knew before that break statement: inputSeconds is a number.
Ваше заявление break
происходит в той точке кода, где мы знаем, что inputSeconds
- это число. Но логически этого недостаточно, чтобы остановить l oop, потому что цель l oop - убедиться, что inputSeconds
- это число и , что оно находится в диапазоне. Поэтому мы не должны break
в этот момент. Вот фиксированный код, помеченный тем, что мы знаем на каждом этапе:
while True:
try:
# at this line, we know nothing
inputSeconds = int(input("♡ Seconds: "))
# at this line, we know that int worked, so inputSeconds is a number.
except ValueError:
# at this line, we know that int didn't work, so we don't have a number.
print("Please enter a valid integer.")
else:
# this line is reached when the try block finishes, so we know the same
# thing we knew at the end of the try block: inputSeconds is a number.
if 0 <= inputSeconds <= 86399:
# now we know that inputSeconds is a number and it is within range.
break
else:
# now we know that inputSeconds is a number and it is not within range.
print("Please enter a value between 0 and 86399.")
# at this line, the loop stopped because of the break statement in the else block,
# so we know what we knew before that break statement: inputSeconds is a number
# and it is within range.
Обратите также внимание на то, как операторы print
происходят на этапах кода, где мы знаем, что не так: мы печатаем «Пожалуйста, введите правильное целое число» , когда мы знаем, что введенное пользователем не было целым числом, и мы печатаем «Пожалуйста, введите значение от 0 до 86399» , когда мы знаем, что пользователь введите число, которое находится за пределами диапазона. Таким образом, этот способ мышления о коде полезен для написания правильного кода, а не только когда речь идет о циклах и break
операторах.