在Python3中打印格式化的Float列表

时间:2018-03-24 07:56:57

标签: python python-3.x printing floating-point formatting

我正在编写一个执行以下操作的程序:

  1. 采用逗号分隔的多个输入(浮点)
  2. 对列表的所有元素执行计算
  3. 输出一个列表(带小数点后两位的浮点数)
  4. 我写了以下程序

    import math
    
    C = 50.0
    H = 30.0
    Q = []
    
    D = input("Please input the D-Values\n").split(",")
    [float(k) for k in D]
    #[int(k) for k in D]
    
    print("D = {}".format(D))
    
    for i in D:
        j = (math.sqrt((2*C*float(i))/H))
        Q.append(j) 
    
    
    print("The answers are")
    print(Q)
    print(type(Q[0]))
    print("Q = {:.2f}".format(Q))
    

    执行此程序时我遇到以下错误

    Traceback (most recent call last):
      File "/home/abrar/pythonPrograms/Challange6.py", line 24, in <module>
        print("Q = {:.2f}".format(Q))
    TypeError: non-empty format string passed to object.__format__
    

    我试图搜索此问题的解决方案,但找不到答案。如果不包括{:.2f},即使用{},该程序工作正常。然而,输出看起来非常混乱。

    非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

您正在尝试使用格式字符串list格式化.2f - 您想要的是格式化列表中的float。这是解决这个问题的一种方法:

Q = [1.3, 2.4]
print(', '.join('{:.2f}'.format(f) for f in Q))
# 1.30, 2.40

从python 3.6开始,这也可以写成:

print(', '.join(f'{q:.2f}' for q in Q))

答案 1 :(得分:1)

您正在尝试格式化列表,但您想要的是格式化此列表的元素,因此您需要使用*Q代替Q*运算符“解压缩”清单)

这是一个解决方案:

fmtL = "Q = " + ', '.join(["{:.2f}"]*len(Q))
print(fmtL.format(*Q))
Q = 1.83, 2.58, 3.16