为什么我的切片中有逗号

时间:2015-09-17 12:33:20

标签: python python-2.7 strptime

当我为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)

2 个答案:

答案 0 :(得分:3)

get_dateOfBirth返回一个元组,对元组执行切片会给你一个元组。

如果您希望birthDatebirthMonthbirthYear为常规整数,而不是每个包含一个整数的元组,请使用索引而不是切片。

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)