Luke
Luke

Reputation: 11

While loop is breaking too early.

import datetime


def main():
    date_string = input('Enter a date in mm/dd/yy format: ')
    date_list = date_string.split('/')
    month = int(date_list[0])
    day = int(date_list[1])
    year = int(date_list[2])
    while month < 1 or month > 12:
        print('Month entered is out of range')
        date_string = input('Re-enter a date in mm/dd/yy format: ')
        date_list = date_string.split('/')
        month = int(date_list[0])
        day = int(date_list[1])
        year = int(date_list[2])
    while day < 1 or day > 31:
        print('Day entered is out of range')
        date_string = input('Re-enter a date in mm/dd/yy format: ')
        date_list = date_string.split('/')
        month = int(date_list[0])
        day = int(date_list[1])
        year = int(date_list[2])
    while year != 13:
        print('Year does not represent 2013')
        date_string = input('Re-enter a date in mm/dd/yy format: ')
        date_list = date_string.split('/')
        month = int(date_list[0])
        day = int(date_list[1])
        year = int(date_list[2])
    print(month, day, year)
main()

When I run the program and enter months and days that are invalid, it progresses down until the year validation and will keep posting that prompt even if the input is invalid for one of the other inputs.

Upvotes: 1

Views: 706

Answers (2)

Greg Hewgill
Greg Hewgill

Reputation: 992747

You could arrange this differently:

while True:
    date_string = input('Enter a date in mm/dd/yy format: ')
    date_list = date_string.split('/')
    month = int(date_list[0])
    day = int(date_list[1])
    year = int(date_list[2])
    if month < 1 or month > 12:
        print('Month entered is out of range')
    elif day < 1 or day > 31:
        print('Day entered is out of range')
    elif year != 13:
        print('Year does not represent 2013')
    else:
        break
print(month, day, year)

Upvotes: 1

Michael Lorton
Michael Lorton

Reputation: 44376

Start again.

You don't want three little while loops. You want one big while loops ( while not success ) with three if statement to make the three checks and if any one fails, set success to false.

Upvotes: 0

Related Questions