0

В python'e новичок. Прошу помощи. Само условие:

Вводятся два целых числа A и B. –215 < A < B < 215. Вывести сумму последовательности A, A+1, A+2, …, B-2, B-1, B.

Пример ввода: 1 3 Пример вывода: 6

Вопрос следующий: как сделать ограничение ввода чисел в диапазоне –215 < A < B < 215

Сделал велосипед, но выглядит он не кошерно. Можно ли как-то проще реализовать?

lownum = -215
highnum = 215

a = input('Input A: \n')
if a < lownum:
     print('Error. Min a = -215')
else:
    b = input('Input B: \n')
if b > highnum:
    print('Error. Max a = 215')
else:
    if a < b:
        x = sum(range(a,b+1))
        res = 'Result >> ' + str(x)
        print(res)
    else:
        print('Input Error')
2
  • А кошерно -- это как? Я подправил на свой вкус, но особой разницы не вижу: lownum,highnum = -215, 215 while True: a = int(input('Input A:')) if a < lownum : print('Error. Min A = -215') continue b = int(input('Input B:'))) if b > highnum : print('Error. Max B = 215') continue if a < b : break else : print('Input Error') exit() x = sum(range(a, b+1)) print ('Result >> ' + str(x)) Кстати, у Вас, как я понимаю, python2
    – alexlz
    8 окт 2014 в 0:46
  • Много else смотрелись страшновато. Кошерно хотелось именно так, как вы поправили. Ибо у меня с применением continue и break не получалось сделать.
    – Rantip
    8 окт 2014 в 8:19

1 ответ 1

2

Питон позволяет объединять условия low < A < B < hi:

#!/usr/bin/env python3
low, hi = -215, 215
while True:
    s = input('Enter space-separated A, B '
              '({low} < A < B < {hi}): '.format_map(vars()))
    try:
        A, B = map(int, s.split())
    except ValueError:
        pass
    else:
        if low < A < B < hi:
            break
        print('Try again')
print('Result:', sum(range(a, b+1)))
16
  • Я бы sum(...) заменил на (A + B)(B - A + 1) / 2.
    – dzhioev
    24 ноя 2015 в 3:14
  • @dzhioev: разрешённый диапазон очень маленький, поэтому sum(range(a, b+1))) достаточно эффективно, проще, понятнее и меньше шансов ошибку совершить. Для больших диапазонов можно (a+b)*(b+1-a) // 2 использовать (обратите внимание на int деление) в противном случае можно неверный результат получить из-за потери точности с float.
    – jfs
    24 ноя 2015 в 7:46
  • до каких пор стоит считать диапазон маленьким? Зачем писать заведомо неэффективный код, если можно использовать всем известную формулу уровня средней школы? Про деление верно заметили, я просто не обратил внимание, что про 3-ий Python идет речь.
    – dzhioev
    24 ноя 2015 в 8:39
  • @dzhioev: premature optimization is the root of all evil
    – jfs
    24 ноя 2015 в 10:25
  • да знаю я, но это не тот случай (IMHO).
    – dzhioev
    24 ноя 2015 в 20:19

Ваш ответ

By clicking “Отправить ответ”, you agree to our terms of service and acknowledge you have read our privacy policy.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками или задайте свой вопрос.