Python 为什么赢了';格式函数与pi算法配合使用

Python 为什么赢了';格式函数与pi算法配合使用,python,format,pi,Python,Format,Pi,这不是我的代码,而是本网站的示例代码: 当我运行它时,我得到了这个错误 Traceback (most recent call last): File "C:/Python34/pi.py", line 7, in <module> print ('{0:.%df}' % min(30, int(num))).format(4 * (4 * atan(1.0/5.0) - atan(1.0/239.0))) AttributeError: 'NoneType' objec

这不是我的代码,而是本网站的示例代码:

当我运行它时,我得到了这个错误

Traceback (most recent call last):
  File "C:/Python34/pi.py", line 7, in <module>
    print ('{0:.%df}' % min(30, int(num))).format(4 * (4 * atan(1.0/5.0) - atan(1.0/239.0)))
AttributeError: 'NoneType' object has no attribute 'format'
回溯(最近一次呼叫最后一次):
文件“C:/Python34/pi.py”,第7行,在
打印('{0:.%df}'%min(30,int(num)))。格式(4*(4*atan(1.0/5.0)-atan(1.0/239.0)))
AttributeError:“非类型”对象没有属性“格式”

这可能是我使用的python版本(3.4.0)的问题吗?也许它与此旧代码不兼容?

是的,这是您的python版本的问题。添加一对外部括号:

print(
    ('{0:.%df}' % min(30, int(digits))).format(4 * (4 * atan(1.0/5.0) - atan(1.0/239.0)))
 )
这是因为在python3
print
中,print是一个函数,该表达式被解析为:

(print('{0:.%df}' % min(30, int(digits)))).format(...)
换句话说,
print
获取一个参数,即:

'{0:.%df}' % min(30, int(digits))
print
调用的返回值上调用
.format
,该调用始终为
None

在python2中,
print
是一条语句,所有内容都作为参数传递给该语句,因此不需要外括号


旁注:您可以避免使用
%
格式,因为您可以嵌套格式:

print('{0:.{1}f}'.format(4 * (4 * atan(1.0/5.0) - atan(1.0/239.0)), min(30, int(digits))))
或者更好:

print('{value:.{prec}f}'.format(prec=min(30, int(digits)), value=4 * (4 * atan(1.0/5.0) - atan(1.0/239.0))))

这意味着您的输入无法转换为
int
,因此返回的是
None
,而不是数字。
print('{value:.{prec}f}'.format(prec=min(30, int(digits)), value=4 * (4 * atan(1.0/5.0) - atan(1.0/239.0))))