Как мне запретить пользователю вводить данные за год до 1582 года (Python)

#python #python-3.x

Вопрос:

Мне было поручено сделать калькулятор високосного года, и, насколько я могу судить, он работает хорошо, однако пользователь все еще может ввести дату до 1582 года. Я не уверен, как бы я стал устанавливать ограничение на введенную дату. Любая помощь очень ценится, спасибо !!

Вот моя программа:

 #intro
print("Hello and welcome to the greatest leap year calculator!")
print("This calculator goes all the way back to 1582, when the Gregorian Calendar was implemented!")

#user input
a= int(input("Please enter a year to see if it was a leap year: "))

#calculate leap years
def leapyr(a):
    if a % 400 == 0:
        return True
    if a % 100 == 0:
        return False
    if a % 4 == 0:
        return True
    return False
print (leapyr(a))

#stop program from closing
input("Press enter to close: ")
 

Комментарии:

1. просто if выполнит эту работу вот так if a <= 1582: print('Invalid Input') ;a = int(input("Enter again");else: leapyr(a);

2. как насчет добавления цикла? while a<=1582: a= int(input("Please enter year after 1582: "))

3. Это сработало как заклинание, спасибо !!

4. Просто отметим, что високосные годы существовали до 1582 года; просто 1300, 1400 и т. Д. Также были високосными годами. В результате за 1500 лет или около того было добавлено слишком много дней, поэтому григорианский календарь «сбросил» год, чтобы привести его в соответствие и исключить некоторые високосные годы в будущем.

5. Вот о чем я думал, когда объясняли задание, но я полагаю, что именно поэтому мой профессор сказал начать с 1582 года; просто чтобы все было несколько упрощено, ха-ха

Ответ №1:

 while True:
    a = int(input("Please enter a year to see if it was a leap year: "))
    if a > 1582:
        break
    else:
        continue
 

Если вы хотите, вы можете добавить обработку исключений:

 try:
    a = int(input("Please enter a year to see if it was a leap year: "))
except TypeError:
    print("Insert an integer value")
except BaseError:
    continue
 

Комментарии:

1. @sittsering, исправлено, писать прямо в пустое пространство немного сложно, я всегда допускал некоторые ошибки. Спасибо

2. я думаю, что в этом случае блок else не нужен, если условие ложно, он все равно будет повторяться.

3. @sittsering, это всего лишь правило БОДРОСТИ духа, чтобы сделать код чище. Но если вы хотите, чтобы код казался короче, вы, безусловно, можете сделать так, как сказали

Ответ №2:

Повторяйте цикл до тех пор, пока вы не будете «довольны» вводом

 print("Hello and welcome to the greatest leap year calculator!")
print("This calculator goes all the way back to 1582, when the Gregorian Calendar was implemented!")


def is_year_valid(year):
    try:
        value = int(year)
        if value < 1582:
            return False, None
        else:
            return True, value
    except ValueError:
        return False, None

def leapyr(a):
    if a % 400 == 0:
        return True
    if a % 100 == 0:
        return False
    if a % 4 == 0:
        return True
    return False


valid = False
while not valid:
    valid, year = is_year_valid(input("Please enter a year to see if it was a leap year: "))


print(leapyr(year))

input("Press enter to close: ")