替换方法有困难

时间:2015-04-12 16:25:45

标签: python replace

我必须让用户以mm/dd/yy格式输入日期,然后以长January, ##, ####格式输出字符串。我不能为我的生活将这个月替换为一个词。

def main():
    get_date=input('Input a date in mm/dd/yy format!\nIf you would like to enter a 1-digit number, enter a zero first, then the number\nDate:')
    month= int(get_date[:2])
    day=int(get_date[3:5])
    year=int(get_date[6:])

    validate(month, day, year)#validates input

    get_month(get_date)

def validate(month,day,year):
    while month>12 or month<1 or day>31 or day<1 or year!=15:
        print("if you would like to enter a one-digit number, enter a zero first, then the number\n theres only 12 months in a year\n only up to 31 days in a month, and\n you must enter 15 as the year")
        get_date=input('Input a date in mm/dd/yy format!:')
        month= int(get_date[:2])
        day=int(get_date[3:5])
        year=int(get_date[6:])

def get_month(get_date):
    if get_date.startswith('01'):
        get_date.replace('01','January')
        print(get_date)

我尝试了很多东西来解决这个问题,但我不能让 1月而不是 01

4 个答案:

答案 0 :(得分:3)

Python中的字符串是不可变的,它们一旦创建就不会改变。这意味着任何修改它的函数都必须返回一个新字符串。你需要捕获这个新值。

get_date = get_date.replace('01','January')

答案 1 :(得分:1)

您可以使用python的日期模块执行此操作(并简化代码)。

strptime函数将使用格式代码解析字符串中的日期。如果它无法正确解析,则会引发值错误,因此无需自定义验证功能

https://docs.python.org/2.7/library/datetime.html#datetime.datetime.strptime

strftime函数将打印出根据相同代码格式化的日期。

https://docs.python.org/2.7/library/datetime.html#datetime.datetime.strftime

更新后,您的代码将如下所示:

from datetime import datetime

parsed = None
while not parsed:
    get_date=input('Input a date in mm/dd/yy format!\nIf you would like to enter a 1-digit number, enter a zero first, then the number\nDate:')
    try:
        parsed = datetime.strptime(get_date, '%m/%d/%y')
    except ValueError:
        parsed = None


print parsed.strftime('%B %d, %Y')

答案 2 :(得分:0)

为什么不使用datetime模块?

year = 2007; month=11; day=3
import datetime
d = datetime.date(year, month, day)
print d.strftime("%d %B %Y")

答案 3 :(得分:0)

最好使用Python的datetime模块:

from datetime import datetime
entered_date = input('Input a date in mm/dd/yy format!\nIf you would like to enter a 1-digit number, enter a zero first, then the number\nDate:')

d = datetime.strptime(entered_date, '%m/%d/%y')
entered_date = d.strftime('%B, %d, %Y')

e.g。

'February, 29, 2016'

通过这种方式,您可以捕获无效日期(例如02/29/15)以及格式错误的日期。