を検証私はこれを読んで、本当に興味を持った私は、日付の検証機能の私自身のバージョンを書き始めValidating date format using regular expression日付(形式と値の両方)
ので、私は近いと思う、しかしかなり、と私は希望いくつかの提案やヒントのように。私はその機能を微調整しようと多くの時間を費やしてきました。
import re
import datetime
# Return True if the date is in the correct format
def checkDateFormat(myString):
isDate = re.match('[0-1][0-9]\/[0-3][0-9]\/[1-2][0-9]{3}', myString)
return isDate
# Return True if the date is real date, by real date it means,
# The date can not be 00/00/(greater than today)
# The date has to be real (13/32) is not acceptable
def checkValidDate(myString):
# Get today's date
today = datetime.date.today()
myMaxYear = int(today.strftime('%Y'))
if (myString[:2] == '00' or myString[3:5] == '00'):
return False
# Check if the month is between 1-12
if (int(myString[:2]) >= 1 or int(myString[:2]) <=12):
# Check if the day is between 1-31
if (int(myString[3:5]) >= 1 or int(myString[3:2]) <= 31):
# Check if the year is between 1900 to current year
if (int(myString[-4:]) <= myMaxYear):
return True
else:
return False
testString = input('Enter your date of birth in 00/00/0000 format: ')
# Making sure the values are correct
print('Month:', testString[:2])
print('Date:', testString[3:5])
print('Year:', testString[-4:])
if (checkDateFormat(testString)):
print('Passed the format test')
if (checkValidDate(testString)):
print('Passed the value test too.')
else:
print('But you failed the value test.')
else:
print("Failed. Try again")
質問1:は、私はそれが有効であるかどうかを比較したいときint(myString[3:5])
を行うための他の方法(より良い)がありますか?私の方法は非常に反復的であると感じ、この機能は00/00/0000を必要とする必要があります。それ以外の場合は破損します。だから、その意味でその機能はそれほど有用ではありません。特に私が私の00/01/1989
を扱う方法は、それはちょうど単にif
を比較しているだけです彼らは確かに00
です。
質問2:多くのif
ステートメントがありますが、私はこのテストを書くための良い方法はありますか?
私はPythonでのプログラミングについてもっと学びたいと思います。どんな提案や助言も大歓迎です。どうもありがとうございました。
私はこれをプログラミング演習として書いています。私はあなたの実装がより洗練されていると思う、私は 'list'(dateparts)で拍手が好きです。私は 'try:' 'except'を調べますが、' if'文の代わりに使うべきだと思われます。ありがとうございました。 'datetime.date()は私が書いたすべてを行い、それ以上のことをしますか? – George
はい、一般的に、Pythonでは例外を処理するのではなく、例外を処理することが一般的です。特定のクラスのクラスを対象とすることを可能にする 'except ValueError:'の意味を見てください。日付時刻。date()は日付オブジェクトを作成します。年、月、または日に無効な値を渡すと例外が発生します。 – SpliFF
私はベストプラクティスの問題を選択しなかったと思うが、 'try:'と 'except:ValueError'を使うように教えてくれてありがとう。ありがとうございました。 – George