2014-12-19 4 views
0
date = raw_input() 
while date!="END" or date!="end": 
    day = date[0:2] 
    month = date[3:5] 
    monthsingle = date[3:5] 
    monthsingle =str(int(monthsingle)) 
    monthsingle = int(monthsingle) 

То, что я пытаюсь сделать здесь присвоить номер месяца, чтобы monthsingle использовать его позже в моем коде. Проблема заключается в том, что пользователю разрешено вводить «02» в феврале. Как я могу это сделать без этой ошибки:Учитывая дату, Попросил напечатать следующую дату

monthsingle =str(int(monthsingle)) 
ValueError: invalid literal for int() with base 10: '' 
+6

Вы должны использовать [ 'datetime'] (https://docs.python.org/2/library/datetime.html) модуль для этого. – CoryKramer

+0

Мне не разрешено использовать модули. –

+6

В этом случае вы должны * сделать свою домашнюю работу. * – Ffisegydd

ответ

0

В этом варианте вы можете обрезать «0» в начале:

monthsingle = date[3:5].lstrip('0') 

или дата проверки [3: 5]: похоже, есть точка.

1

Если пользовательский ввод меньше четырех символов, date[3:5] будет пустой строкой.

Вы можете проверить правильность ввода строки перед тем, как попытаться преобразовать ее в целое число, или поймать исключение и дать пользователю полезное сообщение об ошибке. Неожиданный вход пользователя не должен приводить к сбою вашей программы.

while True: 
    print('Please enter a date in format "dd/mm" or "end".') 
    date = raw_input() # use input() if you use python 3 
    if date.lower() == 'end': 
     print('good bye') 
     break 
    try: 
     day = int(date[0:2]) 
     month = int(date[3:5]) 
     print('Day is %d and month is %d' % (day, month)) 
     # Day and month are integers. 
     # You should check that it's a real date as well. 
    except ValueError: 
     # could not convert to integer 
     print('invalid input!') 
+1

Лучше поймать ошибку и обработать ее, а не пытаться предсказать, когда это произойдет, и избежать ее. Кроме того, пожалуйста, не используйте обратную косую черту в формате даты сообщения об ошибке ... быстрая косая черта или дефис был бы лучше: 'print ('недопустимый ввод. Использовать формат даты" dd/mm ".')' – steveha

0

It is not a problem that the user is allowed to type 02 for February. сообщение об ошибке указывает на то, что проблема в том, что monthsingle пуст (''). Если вы нарезаете строку за ее пределами; вы получаете пустую строку. Это означает, что вход не в формате dd/mm.

Чтобы разобрать дату без использования datetime.strptime() функции:

while True: 
    try: 
     day, month = map(int, raw_input("Enter date dd/mm: ").split('/')) 
     # validate day, month here... 
    except ValueError: 
     print 'invalid input, try again' 
    else: 
     break 

# use day, month to get the next date... 
# you could use datetime module to check your answer: 
from datetime import date, timedelta 
print(date(date.today().year, month, day) + timedelta(1)) 
0
def generate_next_date(day,month,year): 
    #Start writing your code here 
    if((year%400==0 or year%4==0) and month==2): 
     next_day=day+1 
     next_month=month 
     next_year=year 
    elif(month==2 and day==28): 
     next_day=1 
     next_month=month+1 
     next_year=year 
    elif(month==12 and day==31): 
     next_day=1 
     next_month=1 
     next_year=year+1 
    elif(day==31): 
     next_day=1 
     next_month=month+1 
     next_year=year 
    elif((day==30) and (month==4 or month==6 or month==9 or month==11)): 
     next_day=1 
     next_month=month+1 
     next_year=year 
    else: 
     next_day=day+1 
     next_month=month 
     next_year=year 




    print(next_day,"-",next_month,"-",next_year) 


generate_next_date(28,2,2015) 
Смежные вопросы