为了账号安全,请及时绑定邮箱和手机立即绑定

Python 条件打印格式

Python 条件打印格式

森栏 2021-06-11 19:18:14
我有一个这样的功能:def PrintXY(x,y):    print('{:<10,.3g} {:<10,.3g}'.format(x,y) )当我运行它时,它是完美的:>>> x = 1/3>>> y = 5/3>>> PrintXY(x,y)0.333      1.67但是,让我们说x并且y不能保证存在:>>> PrintXY(x, None)unsupported format string passed to NoneType.__format__在这种情况下,我不想打印任何内容,只打印空白区域。我试过了:def PrintXY(x,y):    if y is None:         y = ''    print('{:<10,.3g} {:<10,.3g}'.format(x,y) )但这给出了:ValueError: Unknown format code 'g' for object of type 'str'如果数字不存在,如何打印空格,并在数字存在时正确格式化?我宁愿不打印 0 或 -9999 来表示错误。
查看完整描述

3 回答

?
浮云间

TA贡献1829条经验 获得超4个赞

我已经把它分开了,以明确这些语句的作用。您可以将其合并为一行,但这会使代码更难阅读


def PrintXY(x,y):

    x_str = '{:.3g}'.format(x) if x else ''

    y_str = '{:.3g}'.format(y) if y else ''

    print('{:<10} {:<10}'.format(x_str, y_str))

然后运行给出


In [179]: PrintXY(1/3., 1/2.)

     ...: PrintXY(1/3., None)

     ...: PrintXY(None, 1/2.)

     ...:

0.333      0.5

0.333

           0.5

确保您的格式保持一致的另一种选择是


def PrintXY(x,y):

    fmtr = '{:.3g}'

    x_str = fmtr.format(x) if x else ''

    y_str = fmtr.format(y) if y else ''

    print('{:<10} {:<10}'.format(x_str, y_str))


查看完整回答
反对 回复 2021-06-15
?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

你可以试试这个:


def PrintXY(x=None, y=None):        

    print(''.join(['{:<10,.3g}'.format(n) if n is not None else '' for n in [x, y]]))

您可以轻松扩展以使用x,y和z。


查看完整回答
反对 回复 2021-06-15
?
qq_笑_17

TA贡献1818条经验 获得超7个赞

您可以使代码更具可读性且易于理解问题陈述中的条件,您也可以尝试以下操作:


def PrintXY(x,y):

    formatter = None


    if x is None and y is None:

        x, y = '', ''

        formatter = '{} {}'

    if x is None:

        y = ''

        formatter = '{} {:<10,.3g}'

    if y is None:

        x = ''

        formatter = '{:<10,.3g} {}'

    else:

        formatter = '{:<10,.3g} {:<10,.3g}'


    print(formatter.format(x,y))


查看完整回答
反对 回复 2021-06-15
  • 3 回答
  • 0 关注
  • 241 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信