Проверка входных данных является большой частью хорошего кодирования. Хороший обзор можно найти здесь:
Чтобы сделать проверку пригодной для повторного использования, я поместил проверку в функцию, которая принимает только целые числа, и (если указано minval
, убедитесь, что входное значение больше минимального значения.
def while_invalid_ask_input_return_integer(text, minval = None):
"""Aks for input until a number is given that is > minval if minval not None
returns an integer."""
while True:
c = input (text)
try:
c = int(c)
if minval is not None and c < minval:
raise ValueError # its too small, raise an erros so we jump to except:
return c
except ValueError:
if minval is not None:
print("must be a number and greater ", minval)
else:
print("not a number")
Я использую его, чтобы получить первое число, а второе число получает первое как «ограничение», поэтому оно будет больше. Для суммирования я просто использую диапазон, начинающийся один раз с n
, один раз с n+1
до m и диапазон step
, равный 2. Я проверяю, что имеет четность / нечетность n
, и печатаю текст соответствующим образом:
n = while_invalid_ask_input_return_integer("please enter a number ")
m = while_invalid_ask_input_return_integer("enter number bigger then {}".format(n),n)
print( "Odd sum:" if n % 2 == 1 else "Even sum:", sum(range(n,m+1,2)) )
print( "Even sum:" if n % 2 == 1 else "Odd sum:", sum(range(n+1,m+1,2)) )
Выход:
please enter a number <b>k</b>
not a number
please enter a number <b>55</b>
enter number bigger then 55 <b>2</b>
must be a number and greater 55
enter number bigger then 55 <b>150</b>
Odd sum: 4896
Even sum: 4944
Доку: