Alex's answer在翻译为英语时有以下行
print "%2d. %8.2f %8.2f %8.2f" % (
i, payment, interest, monthPayment)
我不确定该行
"%2d. %8.2f %8.2f %8.2f" % #Why do we need the last % here?
这似乎意味着以下
%-words似乎意味着以下
%2d:两位小数的十进制表示
2-4。 %8.2f:两位小数的浮点表示
我不确定为什么我们使用8 in%8.2f。
您如何理解具有挑战性的路线?
答案 0 :(得分:7)
8.2中的8是宽度
“要打印的最小字符数。如果要打印的值小于此数字,则结果将填充空格。即使结果较大,该值也不会被截断”
2是小数位数
最终的%只是将格式字符串(引号)与参数列表(括号中)相关联。 他们选择%来做这件事有点令人困惑 - 可能有一些深刻的蟒蛇理由。
编辑:显然'%'的使用仅仅是因为'%'在格式中使用 - 这是恕我直言,并且保证会引起混淆。这就像在浮点数的末尾需要一个额外的点来表明它是浮点数!
答案 1 :(得分:4)
最后一个%是一个运算符,它接收前面的字符串和后面的元组,并在您注意时应用格式。有关详细信息,请参阅Python tutorial。
答案 2 :(得分:1)
%是一个生成格式字符串的运算符。一个简单的例子是:
"%s is %s" % ( "Alice", "Happy" )
哪个会评估为字符串"Alice is Happy"
。提供的格式字符串定义了传递的值如何放入字符串中;语法可用here。简而言之,d
是“视为十进制数”,8.2
是“填充到8个字符并舍入到2个小数位”。从本质上讲,它看起来特别是使用了这种格式,以便在使用等宽字体查看时,答案排成一行。 :)
在我的代码示例中,s
表示“视为字符串”。
答案 3 :(得分:1)
字符串后面的%告诉Python尝试填写左侧的变量 '%'运算符,带有'%'运算符右侧列表中的项目。
'%'运算符知道通过查找以%开头的字符串中的字符来查找字符串中的变量。
您的困惑在于您认为%运算符和字符串中的%字符是相同的。
尝试以这种方式查看它,在字符串%之外是一个运算符,在字符串内部它可能是替换模板。
答案 4 :(得分:1)
像往常一样,需要提供文档引用 - string-formatting:
字符串和Unicode对象有一个独特的内置操作:%运算符(模数)。这也称为字符串格式或插值运算符。给定格式%值(其中format是字符串或Unicode对象),格式的%转换规范将替换为零个或多个值元素。效果类似于在C语言中使用sprintf。
转换说明符的说明,用于解释%8.2f
转换说明符包含两个或多个字符,并具有以下组件,这些组件必须按以下顺序出现:
当右参数是字典(或其他映射类型)时,格式字符串包括映射键(2)。将示例分解为2个步骤,我们有一个字典和一个包含字典中的键的格式(#
是一个键):
>>> mydict = {'language':'python', '#':2}
>>> '%(language)s has %(#)03d quote types.' % mydict
'python has 002 quote types.'
>>>
答案 5 :(得分:0)
%8.2f表示允许8个字符空格保存由持有浮点数的相应变量给出的数字,然后小数精度为2。