如何强制pythons format方法在计算值时放置值

如何强制pythons format方法在计算值时放置值,python,datetime,string-formatting,Python,Datetime,String Formatting,我需要根据日期计算会计年度,当我使用datetime.datetime对象的format方法时,它正在为具有不同值的相同类型对象生成意外结果 下面是我的代码 从日期时间导入日期时间 dt=datetime.strTime'2019-03-03','%Y-%m-%d' 在2019-2018年期间,下面这条线正在扼杀我的思想 如果dt.month>3,则打印“{}-{}”。格式dt.year,dt.year+1%100,否则dt.year-1,dt.year%100 这将产生结果3 2019 19

我需要根据日期计算会计年度,当我使用datetime.datetime对象的format方法时,它正在为具有不同值的相同类型对象生成意外结果

下面是我的代码

从日期时间导入日期时间 dt=datetime.strTime'2019-03-03','%Y-%m-%d' 在2019-2018年期间,下面这条线正在扼杀我的思想 如果dt.month>3,则打印“{}-{}”。格式dt.year,dt.year+1%100,否则dt.year-1,dt.year%100 这将产生结果3 2019 19 打印日期月、日期年、日期年%100 dt=datetime.strTime'2019-04-04','%Y-%m-%d' 但下面这条线运行良好,因为它将导致2019-20年 如果dt.month>3,则打印“{}-{}”。格式dt.year,dt.year+1%100,否则dt.year-1,dt.year%100 这将产生结果4 2019 19 打印日期月、日期年、日期年%100 我期待结果

2018-19 if dt = datetime.strptime('2019-03-03','%Y-%m-%d')
2019-20 if dt = datetime.strptime('2019-04-04','%Y-%m-%d')
我无法找出代码的问题

## Below line is killing my mind as it is resulting 2019-2018
print('{}-{}'.format(dt.year, (dt.year+1)%100 if dt.month > 3 else dt.year-1,(dt.year)%100))
好的,让我们来分析一下你的代码:

“{}-{}”。如果dt.month>3,则dt.year,dt.year+1%100,否则dt.year-1,dt.year%100

你有2个{}但有3个!论据:

去年, 如果dt月>3,则dt年+1%100,否则dt年-1, dt.year%100被忽略,因为只有2{} 如您所见,if/else仅适用于中间参数

您希望在两个参数上都使用if,因此您需要重复if或使用括号来分组。但是分组将产生一个元组,因此您需要使用*来解包这些值。我在注释中提到了分组,但忘记了解包

具有两个ifs的解决方案:

'{}-{}'.format(dt.year if dt.month > 3 else dt.year-1, 
               (dt.year+1)%100 if dt.month > 3 else (dt.year)%100)
如您所见,一个逗号-两个参数。为了便于阅读,把它分成两行

使用一个if和元组解包的解决方案:

'{}-{}'.format( *(dt.year, (dt.year+1)%100) if dt.month > 3 else *(dt.year-1,(dt.year)%100) )

为什么要拆包?因为{}-{}.format'2018',所以'19'只得到一个元组参数,而不是两个参数。它不知道该怎么处理它。*在前面,解压列表或元组,并将它们作为普通参数提供。-了解更多信息。

所以。。。预期的结果是什么?请不要发布文本截图。只需复制粘贴到此处并相应格式化,屏幕对于调试目的无效。如果dt.MOUNT>3,则dt.year-1返回dt.year+1%100两位数或dt.year-1四位数。不太确定您还期望什么…?还有两个格式括号“{}-{}”,但将3个参数传递给itThanks以注意括号和数字,我认为您只需要括号:“{}-{}”。如果dt.month>3 else dt.year-1,dt.year%100,格式dt.year,dt.year+1%100?因为你想让你的if同时处理两个值,而不仅仅是一个。谢谢你的回答,它清除了我脑海中所有的阴云。答案有一个更正,只需在开头的格式中包括*,如“{}-{}”。格式*dt.year,dt.year+1%100,如果dt.month>3,则dt.year-1,dt.year%100