我对Python语言很陌生,在我的第一次练习中,我想制作一个计算常数e的脚本。
为此,我定义了一个函数calc_temp
,它将具有变量temp
,并且temp将从等于1开始。然后我将temp
乘以1的商和一个名为e_num
的变量,然后我将temp添加到变量approx_e
。
然后,我使用while True:
循环无限期地执行该函数。
代码如下所示:
#!/usr/bin/python
import math
from decimal import *
temp = 1
approx_e = Decimal(1)
e_num = 1
def calc_temp(e_num):
global approx_e
global temp
len_ = math.log10(math.factorial(e_num))
getcontext().prec = len_
temp = Decimal(temp * 1 / e_num)
e_num = e_num + 1
approx_e = approx_e + temp
return approx_e
while True:
calc_temp(e_num)
但是,当我执行脚本时,它会引发以下TypeError
:
Traceback (most recent call last):
File "/home/dorian/Desktop/ever3.py", line 17, in <module>
calc_temp(e_num)
File "/home/dorian/Desktop/ever3.py", line 14, in calc_temp
approx_e = approx_e + temp
File "/usr/lib/python2.7/decimal.py", line 1209, in __add__
ans = ans._fix(context)
File "/usr/lib/python2.7/decimal.py", line 1692, in _fix
changed = rounding_method(self, digits)
File "/usr/lib/python2.7/decimal.py", line 1771, in _round_half_even
if _exact_half(self._int, prec) and \
TypeError: integer argument expected, got float
我尝试更改变量的类型,使它们成为Decimal
s,int
egers和float
点数,但它仍然会引发错误。可能导致什么呢?
答案 0 :(得分:1)
您正在将上下文精度设置为float:
len_ = math.log10(math.factorial(e_num))
getcontext().prec = len_
将其设置为整数:
getcontext().prec = int(len_)
引用decimal.Context()
documentation:
prec 字段是一个正整数,用于设置上下文中算术运算的精度。