你能解决一个小的编程问题吗?我试图以dd-mm-YYYY的形式创建日期,如果我随机选择的日期是1位数字,我会在开始时添加0来制作例如01052015 for 01-05-2015而不是152015。
这是我的代码......
from random import randint
day = str(randint(1, 29))
if day in range(1,9):
zero_day = str("0"+day)
else:
zero_day = day
month = str(randint(5, 10))
if month in range(5, 9):
zero_month = str("0"+month)
else:
zero_month = month
split_date= zero_day + zero_month + "2015"
print("Day="+zero_day)
print("Month="+zero_month)
print(split_date)
为什么这不起作用?
它不会在1位数天和月之前添加任何0。
非常令人沮丧,我确信它只是一件小事。
感谢。
答案 0 :(得分:4)
您正在将随机数转换为字符串,然后测试它是否在范围内 - 由整数组成:
简单更改您的代码:
day = randint(1, 29)
if day < 10:
zero_day = "0"+str(day)
else:
zero_day = str(day)
或者,更好的是,您可以使用字符串格式来处理它。这是当天的一个例子:
zero_day = '{:02d}'.format(randint(1, 29))
这将填零随机整数。如果该数字为0 <= n <= 9,则根据需要将具有前导零。
生成最终日期字符串:
random_date = '{:02d}-{:02d}-{}'.format(randint(1,29), randint(5,10), 2015)
答案 1 :(得分:4)
我会使用datetime
模块:
from random import randint
from datetime import datetime
day = randint(1, 29)
month = randint(5, 10)
year = 2015
dt = datetime(year=year, month=month, day=day)
dt_str = dt.strftime('%Y-%m-%d')
print(dt_str)
输出是:
2015-05-02
答案 2 :(得分:1)
day = str(randint(1, 29))
if day in range(1,9):
您的问题是您要将随机数转换为String。你的代码检查字符串&#34; 1&#34;在1到8之间的数字范围内(不是9,你必须添加+1)。解决方案很简单:只需将数字转换为if-block
中的字符串即可day = randint(1, 29)
if day in range(1,10): # why not just use day < 10?
zero_day = "0"+str(day)
else:
zero_day = str(day)
答案 3 :(得分:0)
范围功能不包括在内。所以范围(5,9)会产生5,6,7,8。范围也会生成整数,而不是字符串。