当我为date/month/year
切片时,
这总是"()"
& ","
。
我可以知道如何摆脱它吗?
用户输入= 21/12/1999
输出=(1999,12,21)
def get_dateOfBirth():
while True:
dateOfBirth_input = raw_input("Please enter your date of birth in DD/MM/YYYY format: ")
try:
result = strptime(dateOfBirth_input, "%d/%m/%Y")
except ValueError:
print "Please Key in the valid Date Of Birth"
else:
return result[:3]
dateOfBirth = get_dateOfBirth()
birthDate = dateOfBirth[2:3]
birthMonth = dateOfBirth[1:2]
birthYear = dateOfBirth[:1]
print "date is" + str(birthDate)
print "month is" + str(birthMonth)
print "year is" + str(birthYear)
答案 0 :(得分:3)
get_dateOfBirth
返回一个元组,对元组执行切片会给你一个元组。
如果您希望birthDate
,birthMonth
和birthYear
为常规整数,而不是每个包含一个整数的元组,请使用索引而不是切片。
dateOfBirth = get_dateOfBirth()
birthDate = dateOfBirth[2]
birthMonth = dateOfBirth[1]
birthYear = dateOfBirth[0]
#bonus style tip: add a space between 'is' and the number that follows it
print "date is " + str(birthDate)
print "month is " + str(birthMonth)
print "year is " + str(birthYear)
结果:
Please enter your date of birth in DD/MM/YYYY format: 21/12/1999
date is 21
month is 12
year is 1999
答案 1 :(得分:2)
time.strptime
函数实际上返回一个struct_time
对象,但如果你将它视为一个元组,那么该对象的行为就像一个元组。所以你可以使用切片和索引以访问其属性,以及属性访问的标准语法,例如dateOfBirth.tm_year
。使用属性访问语法比使用元组访问更清晰,并且您不必担心记住不同属性的顺序.OTOH,基于元组的方法通常会导致更短(如果更加神秘)的代码。
在这个版本的程序中,我使用了*
解包运算符(也就是“splat”运算符)将所需的字段传递给format
函数; struct_time
对象在该上下文中的行为类似于元组。我还导入了readline
模块,该模块自动将行编辑添加到raw_input()
,如果用户犯了错误,那么这很好。需要重新输入数据。但是,并非所有平台都支持readline
。
我还将提示字符串移出raw_input()
调用,以使代码看起来更整洁,并稍微优化了try:...except
块。
from time import strptime
import readline
def get_dateOfBirth():
prompt = "Please enter your date of birth in DD/MM/YYYY format: "
while True:
dateOfBirth_input = raw_input(prompt)
try:
return strptime(dateOfBirth_input, "%d/%m/%Y")
except ValueError:
print "Please Key in the valid Date Of Birth"
dateOfBirth = get_dateOfBirth()
print "day is {2}\nmonth is {1}\nyear is {0}".format(*dateOfBirth)