我很难找到将用户给出的日期输入转换为mm / dd / yyyy为3个变量的最佳方法。我无法拆分它,因为我收到错误,因为它是一个' float'。
>>> date=3/2/2016
>>> date.split('/')
Traceback (most recent call last):
File "<pyshell#152>", line 1, in <module> date.split('/')
AttributeError: 'float' object has no attribute 'split'
我需要添加什么来确保它不会通过除法来评估日期?
def main():
date=input("Enter date mm/dd/yyyy: ")
我希望输入日期为mm / dd / yyyy,然后将此方法转换为3个变量m =月d =日y =年
最好的方法是什么?
答案 0 :(得分:2)
尝试str.split:
>>> test_date = "05/12/2016"
>>> month, day, year = test_date.split('/')
>>> print("Month = %s, Day = %s, Year = %s") % (month, day, year)
Month = 05, Day = 12, Year = 2016
答案 1 :(得分:0)
我在下面编写了这段代码,它的工作原理非常好。
>>> date='3/2/2016'
>>> new=date.split('/')
>>> new
['3', '2', '2016']
>>>
>>> m,d,year=new
>>> m
'3'
>>> d
'2'
>>> year
'2016'
>>>
就像Jessica Smith已经指出的那样,date = 3/2/2016评估表达式并对数字进行分割。它必须是要拆分的字符串字符串类型。
答案 2 :(得分:0)
错误&#34;&#39;浮动&#39;对象没有属性&#39; split&#39;&#34; 建议您的示例中的type(date) == float
暗示您尝试使用Python 2解释器运行Python 3代码{{1}将其输入计算为Python表达式,而不是将其作为字符串返回。
要在Python 2上以字符串形式显示日期,请使用input()
代替raw_input()
:
input()
要使它适用于Python 2和3,请在脚本顶部添加:
date_string = raw_input("Enter date mm/dd/yyyy: ")
如果您需要旧的Python 2 try: # make input() and raw_input() to be synonyms
input = raw_input
except NameError: # Python 3
raw_input = input
行为;你可以明确地致电input()
。
要验证输入日期,您可以use datetime.strptime()
并抓住eval()
:
ValueError
from datetime import datetime
try:
d = datetime.strptime(date_string, '%m/%d/%Y')
except ValueError:
print('wrong date string: {!r}'.format(date_string))
保证输入日期有效,否则引发.strptime()
。成功时,ValueError
,d.year
,d.month
按预期工作。
全部放在一起(未经测试):
d.day
请参阅Asking the user for input until they give a valid response。
如果您必须:
,则可以使用#!/usr/bin/env python
from datetime import datetime
try: # make input() and raw_input() to be synonyms
input = raw_input
except NameError: # Python 3
raw_input = input
while True: # until a valid date is given
date_string = raw_input("Enter date mm/dd/yyyy: ")
try:
d = datetime.strptime(date_string, '%m/%d/%Y')
except ValueError: # invalid date
print('wrong date string: {!r}'.format(date_string))
else: # valid date
break
# use the datetime object here
print("Year: {date.year}, Month: {date.month}, Day: {date.day}".format(date=d))
代替.split('/')
.strptime()
它不会验证这些值是否在格里高利历中形成有效日期。
答案 3 :(得分:-1)
<强>尝试:强>
def main():
month, day, year = [int(x) for x in raw_input("Enter date mm/dd/yyyy: ").split('/')]
print "Month: {}\n".format(month), "Day: {}\n".format(day), "Year: {}".format(year)
main()
<强>输出:强>
Enter date mm/dd/yyyy: 03/09/1987
Month: 3
Day: 9
Year: 1987