2014-01-29 2 views
0
elif search.lower() == "m": 
    DMY = input("please enter your date of birth you are looking for (date/month/year) : ") 
    DMY = DMY.split("/") 
    DMY = DMY[1] 

    for line in open("datafile.txt"): 
     if DMY in line: 
      print(line) 
+1

использовать '' re' или datetime' модуль для проверки –

+0

или просто 'если не«/ "в DMY: ...' ... – Torxed

+1

Код должен быть переработан для аккуратного разделения шагов ввода, проверки и действия: 'elif' в первой строке сообщает мне, что вы делаете все шаги в одном ' if 'branch ... – Don

ответ

6

Вы можете использовать обработку исключений:

DMY = input("please enter your date of birth you are looking for (date/month/year) :` ") 
DMY = DMY.split("/", 2) 
try: 
    DMY = int(DMY[1]) 
except (IndexError, ValueError): 
    # User did not use (enough) slashes or the middle value was not an integer 
    print("Oops, did you put in an actual date?") 

или вы могли бы попытаться разобрать дату:

import datetime 

DMY = input("please enter your date of birth you are looking for (date/month/year) :` ") 
try: 
    DMY = datetime.datetime.strptime(DMY, '%d/%m/%Y').date() 
except ValueError: 
    # User entered something that doesn't fit the pattern dd/mm/yyyy 
    print("Oops, did you put in an actual date?") 

Последнее имеет то преимущество, что теперь у вас есть реальный datetime.date() объект, который делает гораздо больше, чем просто проверить, что пользователь вводил косые черты и целые числа; он также подтверждает, что введенное значение действительно может быть интерпретировано как дата. 30/02/4321 не разобрать, потому что нет 30-го февраля, даже в год 4321

+0

+1 Код совершенный, но мне нравится использовать цикл while, чтобы заставить пользователя ввести желаемый формат. Это хорошая практика? – Llopis

+1

@ Llopis: Да, это хорошая практика. Используйте цикл while while, продолжайте просить, пока у вас не будет действительного ввода. Затем используйте 'break' для завершения цикла. –

1

Использование найти:

s = "29/01/2014" 
if s.find("/") == -1: 
    print "No '/' here!" 
else: 
    print "Found '/' in the string." 
Смежные вопросы