无法准确理解一行Python代码
Alex的回答中有一句话翻译成英文是这样的:
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?
这似乎意味着以下几点:
- 对i应用格式 %2d
- 对payment应用格式 %8.2f
- 对interest应用格式 %8.2f
- 对monthPayment应用格式 %8.2f
这些%-开头的格式说明似乎意味着:
%2d: 表示一个有两位数字的整数
2-4. %8.2f: 表示一个有两位小数的浮点数
我不太明白为什么在%8.2f中要用到8这个数字。
你是怎么理解这句比较难的代码的呢?
6 个回答
1
“%”是一个运算符,用来创建格式化字符串。举个简单的例子:
"%s is %s" % ( "Alice", "Happy" )
这个例子会得到字符串 "Alice is Happy"
。你提供的格式字符串决定了你传入的值是怎么放进这个字符串里的;具体的语法可以在这里找到。简单来说,d
表示“把它当作一个十进制数字”,而8.2
表示“填充到8个字符,并且四舍五入到小数点后2位”。实际上,这种格式的使用是为了让答案在用等宽字体查看时能够对齐。:)
在我的代码示例中,s
表示“把它当作一个字符串”。
4
最后的 % 是一个运算符,它会把前面的字符串和后面的元组结合起来,进行格式化,就像你提到的那样。想了解更多细节,可以查看 Python 教程。
7
8.2中的8表示宽度
“要打印的最小字符数。如果要打印的内容少于这个数字,结果会用空格填充。如果结果比这个数字大,也不会被截断。”
2则表示小数点后保留的位数。
最后的%符号是用来把格式字符串(用引号括起来的部分)和参数列表(用括号括起来的部分)连接起来的。
用%来做这个有点让人困惑,可能是因为在Python中有某种深层次的原因。
补充:显然,使用'%'只是因为格式中也用到了'%',我觉得这样做很傻,肯定会让人困惑。这就像要求浮点数后面多一个点来表示它是浮点数一样!