2016-12-13 1 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

@asongtoruin하지만 사용자가 이미 입력 한 날짜가 아님을 입력하길 원합니다 –

+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)을 건너 뜁니다. 그것은 아무런 해를 끼치 지 않을 것입니다.

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

relativedeltadateutils 라이브러리가 정확히 후있어 무엇을 할 것인가에서 - .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") 
관련 문제