2016-12-13 5 views
0

だから、誰かが18歳を超えていれば投票できるので、うまくいくプログラムを作る必要があります。timedeltaを整数に変更する

しかし、私は入力された生年月日が18年以上前であるかどうかをプログラムに計算させる方法に苦労しています。私は、今日の日付から生年月日を取り除くなど、さまざまなことを試みました。

現在、datetime.timedelta形式の生年月日と、if文で18と比較できる整数との間の差異を変更することは簡単にできると思います。

私はあまりにも複雑なことはしたくないです。

ここに私の現在のコードです:

from datetime import datetime 
while True: 
    inp = input("Enter date in format yyyy/mm/dd") 
    try: 
     then = datetime.strptime(inp, "%Y/%m/%d") 
     break 
    except ValueError: 
     print("Invalid input") 
diff = then - datetime.now() 
diff = -diff 
years = diff/365.25 
years = int(years) 
if years >= 18: 
    print("You can vote") 
else: 
    print("You can't vote") 

現在の問題は、それを変更しようとしているのラメの方法でしたyears = int(years)ですが。

どうすればこの問題を解決できますか?

+0

(その後、datetime.now())[ 'dateutil'](http://labix.org/python-dateutil#head-ba5ffd4df8111d1b83fc194b97ebecf837add454)ライブラリ、' relativedeltaを見てみましょう.years'がすべきあなたが何をしているのか教えてください。 – asongtoruin

+0

@ason​​gtoruinしかし、すでに入力されているのではなく、ユーザが日付を入力してほしい –

+0

その時点以降、 'datetime'形式の変数への入力を読み込んだので、質問は機能的には同じです – asongtoruin

答えて

0
# Python 2.7.10 
from datetime import datetime 
while True: 
    inp = raw_input("Enter date in format yyyy/mm/dd") # 1987/03/29 
    try: 
     then = datetime.strptime(inp, "%Y/%m/%d") 
     break 
    except ValueError as e: 
     print e 
     print("Invalid input") 
diff = then - datetime.now() 
diff = -diff 

print dir(diff) 
print diff.days 

years = float(diff.days)/365.25 
if int(years) >= 18: 
    print("You can vote") 
else: 
    print("You can't vote") 

# 29.711156742 
>>> You can vote 

# Python 3.5.2 
from datetime import datetime 
while True: 
    inp = input("Enter date in format yyyy/mm/dd") 
    try: 
     then = datetime.strptime(inp, "%Y/%m/%d") 
     break 
    except ValueError as e: 
     print (e) 
     print("Invalid input") 
diff = then - datetime.now() 
diff = -diff 
years = float(diff.days)/365.25 
years = int(years) 
if years >= 18: 
    print("You can vote") 
else: 
    print("You can't vote") 

>>> You can vote 
0

私は問題としてyears = int(years)を表示します。スキップしてください。それはどんな害もしません。 dateutilsライブラリから

then = datetime.strptime(inp, "%Y/%m/%d") 
diff = datetime.now() - then 
if diff.years/365.25 >= 18: 
    print('You can vote.') 
else: 
    print('You can\'t vote') 
0

relativedeltaあなたは後にしている正確に何をします - 2つの日付の間の年の数だけ.years我々の出力を指定することによって。

from datetime import datetime 
from dateutil.relativedelta import relativedelta 


while True: 
    inp = input("Enter date in format yyyy/mm/dd: ") 
    try: 
     then = datetime.strptime(inp, "%Y/%m/%d") 
     break 
    except ValueError: 
     print("Invalid input") 

difference_in_years = relativedelta(datetime.now(), then).years 

if difference_in_years >= 18: 
    print("You can vote") 
else: 
    print("You can't vote") 
関連する問題