我正在尝试在这样的列表中加减每个数字1-1/3 + 1/5-1/7 + 1/9。如果继续这样做,然后将答案乘以4,则会得到pi的近似值。
我有一个称为ODD的奇数列表,但是我无法如上图所示进行加法和减法运算
我今天才刚开始使用python编码,所以这可能是一个简单的错误,但我在网上找不到任何东西
谢谢, 亚当
import time
start_time = time.time()
EVEN = []
ODD = []
y = int(1.e2)
x = range(y)
#-----------------------------------------------------------------------------------------
for i in x:
if i%2 == 0:
print(i)
EVEN.append(i)
else:
print(i)
ODD.append(i)
oc = len(ODD)
ec = len(EVEN)
print("")
print(str(oc) + " " + "Odds Found!")
print(str(ec) + " " + "Evens Found!")
print("--- %s seconds to compute ---" % "{:.2f}".format(((time.time() - start_time))))
time.sleep(3) #START OF PROBLEM
for i in ODD:
fract = 1/ODD[i]-1/ODD[i+1]
sfract = fract + 1/ODD[i+2]
print(fract)
print(sfract)
答案 0 :(得分:3)
您的问题是因为此循环
for i in ODD:
遍历列表中的元素(对于每个循环)。这就是为什么ODD [i]会导致索引错误或计算出您不感兴趣的东西的原因。您应该只使用变量i。
flag = True
for i in ODD:
if flag:
fract += 1 / i
else:
fract -= 1/ i
flag = not flag
此外,由于您使用Python编写代码,因此我建议使用列表理解:
EVEN = [i for i in x if i % 2 == 0]
ODD = [i for i in x if i % 2 == 1]
答案 1 :(得分:2)
在此程序中绝对不需要使用任何列表。
arbitrary_number = 1000
sign = 1
total = 0
for n in range(1, arbitrary_number, 2):
total += sign * 1.0 / n
sign = -sign
print(4*total)
答案 2 :(得分:1)
我之所以写出来,是为了使每个步骤都清晰明了。有更简单的方法可以用更少的代码来编写代码。请记住,Python是简单的。通常有一种明确的方法可以提出解决方案,但是请务必尝试进行试验。
number = 0 #initialize a number. This number will be your approximation so set it to zero.
count = 0 #set a count to check for even or odd [from the formula] (-1)^n
for num in range(1,100,2): #skip even values.
"""
The way range works in this case is that you start with 1, end at 100 or an arbitrary
number of your choice and you add two every time you increment.
For each number in this range, do stuff.
"""
if count%2 == 0: #if the count is even add the value
number += 1/num #example add 1, 1/5, 1/9... from number
count += 1 #in order to increment count
else: #when count is odd subtract
number -= 1/num #example subtract 1/3, 1/7, 1/11... from number
count += 1 #increment count by one
number = number*4 #multiply by 4 to get your approximation.
希望这会有所帮助,欢迎使用Python!
答案 3 :(得分:0)
让我们检查一下for循环:
for i in ODD:
fract = 1/ODD[i]-1/ODD[i+1]
sfract = fract + 1/ODD[i+2]
print(fract)
print(sfract)
由于您在循环内声明了fract
和sfract
,所以它们不计算总和,而仅计算总和的两个和三个项。如果您在循环外初始化变量,则它们的作用域将使它们能够累加值。
对于您正在做的事情,我将对那些变量使用numpy.float
以防止溢出。
答案 4 :(得分:0)
如果需要在列表中顺序进行加减,则可以使用Python slice运算来创建2个具有奇数和偶数索引的列表。
# Example list
lst = [1, 2, 3, 4, 5, 6, 7, 8, 9]
# [1, 3, 5, 7, 9]
add_list = lst[0::2]
# [2, 4, 6, 8]
subtract_list = lst[1::2]
# Now you can add all the even positions and subtract all the odd
answer = sum(add_list) - sum(subtract_list) # Same as 1-2+3-4+5-6+7-8+9