首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >条件打印格式

条件打印格式
EN

Stack Overflow用户
提问于 2018-09-11 10:02:49
回答 4查看 1.8K关注 0票数 2

我有这样的功能:

代码语言:javascript
复制
def PrintXY(x,y):
    print('{:<10,.3g} {:<10,.3g}'.format(x,y) )

当我运行它的时候,它是完美的:

代码语言:javascript
复制
>>> x = 1/3
>>> y = 5/3
>>> PrintXY(x,y)
0.333      1.67

但是,假设xy不一定存在:

代码语言:javascript
复制
>>> PrintXY(x, None)
unsupported format string passed to NoneType.__format__

在这种情况下,我不想打印任何东西,只是空白。我试过:

代码语言:javascript
复制
def PrintXY(x,y):
    if y is None: 
        y = ''
    print('{:<10,.3g} {:<10,.3g}'.format(x,y) )

但这意味着:

代码语言:javascript
复制
ValueError: Unknown format code 'g' for object of type 'str'

如果数字不存在,如何打印空格,以及在数字不存在时如何正确地进行格式化?我宁愿不打印0或-9999来表示错误。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-09-11 10:05:55

我把它分开,以清楚说明这些发言取得了什么成果。您可以将其合并成一行,但这会使代码更难阅读。

代码语言:javascript
复制
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))

然后跑给

代码语言:javascript
复制
In [179]: PrintXY(1/3., 1/2.)
     ...: PrintXY(1/3., None)
     ...: PrintXY(None, 1/2.)
     ...:
0.333      0.5
0.333
           0.5

另一种确保格式保持一致的方法是执行以下操作:

代码语言:javascript
复制
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))
票数 6
EN

Stack Overflow用户

发布于 2018-09-11 10:10:11

你可以试试这个:

代码语言:javascript
复制
def PrintXY(x=None, y=None):        
    print(''.join(['{:<10,.3g}'.format(n) if n is not None else '' for n in [x, y]]))

您可以轻松地扩展到使用xyz

票数 2
EN

Stack Overflow用户

发布于 2018-09-11 10:09:22

您只需使用以下不同的print命令:

代码语言:javascript
复制
def PrintXY(x,y):
    if y is None: 
        print('{:<10,.3g}'.format(x) )
    else:
        print('{:<10,.3g} {:<10,.3g}'.format(x,y) )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52273431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档