Python:以10的倍数执行计算的嵌套循环
我对使用python还不熟悉,这个程序的目标是让它向自身添加(1/2)和(1/3)很多次,如下图所示。我认为我需要做的是让外循环确定从“1000”开始,然后以10的倍数增加多少次(1000、10000、100000等)。内部循环是我想要实际添加(1/2)和(1/3)的地方。下面是我目前编写的代码,它没有按照我的要求执行,以及代码应该执行的示例输出。我想我走对了我只是不知道还能做什么,我觉得我已经尝试了一切。在此方面的任何帮助都将不胜感激!谢谢 我的代码:Python:以10的倍数执行计算的嵌套循环,python,loops,math,nested-loops,Python,Loops,Math,Nested Loops,我对使用python还不熟悉,这个程序的目标是让它向自身添加(1/2)和(1/3)很多次,如下图所示。我认为我需要做的是让外循环确定从“1000”开始,然后以10的倍数增加多少次(1000、10000、100000等)。内部循环是我想要实际添加(1/2)和(1/3)的地方。下面是我目前编写的代码,它没有按照我的要求执行,以及代码应该执行的示例输出。我想我走对了我只是不知道还能做什么,我觉得我已经尝试了一切。在此方面的任何帮助都将不胜感激!谢谢 我的代码: def main(): for
def main():
for count in range(1000, 1000000000):
sum12 = 0.0
sum13 = 0.0
for count2 in (1000, 1000000000):
sum12 = sum12 + (1.0 / 2.0)
sum13 = sum13 + (1.0 / 3.0)
print(sum12, sum13)
main()
示例输出:
Iterations, 1/2 sum, 1/2 product, diff, 1/3 sum, 1/3 product, diff
1000 500.0 500.0 0.0 333.33333333333184 333.3333333333333 -1.4779288903810084e-12
10000 5000.0 5000.0 0.0 3333.3333333337314 3333.333333333333 3.9835867937654257e-10
100000 50000.0 50000.0 0.0 33333.33333328976 33333.33333333333 -4.3568434193730354e-08
1000000 500000.0 500000.0 0.0 333333.3333322413 333333.3333333333 -1.092033926397562e-06
10000000 5000000.0 5000000.0 0.0 3333333.3337136623 3333333.333333333 0.00038032932206988335
100000000 50000000.0 50000000.0 0.0 33333333.28415699 33333333.333333332 -0.04917634278535843
1000000000 500000000.0 500000000.0 0.0 333333332.6651181 333333333.3333333 -0.6682152152061462
我认为我需要做的是让外循环确定从“1000”开始,然后以10的倍数增加多少次(1000、10000、100000等)
换句话说,你的问题是如何编写类似于你的范围(1000100000000)
,但不是给你所有的值1000
,1001
,…,100000000
,它只给你1000
,10000
,对吗?因此,就像范围(开始、停止、步骤)
,不同的是它在每次迭代时都会乘上而不是加上步骤
让我们从一个简化版的range
工作原理开始:
def range(start, stop, step):
while start < stop:
yield start
start += step
那么,我们如何将其转化为一个几何范围,即相乘而不是相加?只需将+
更改为*
:
def geometric_range(start, stop, step):
while start < stop:
yield start
start *= step
def几何_范围(开始、停止、步骤):
启动<停止时:
产量起点
开始*=步骤
我认为我需要做的是让外循环确定从“1000”开始,然后以10的倍数增加多少次(1000、10000、100000等)
这正是示例输出建议您应该做的
有很多方法可以做到这一点。我将从一种易于理解的方法开始,这种方法将使大多数经验丰富的python程序员畏缩不前,并逐步完善,希望不会让经验丰富的python程序员畏缩不前
以下是一种易于理解的非Python方法:
count = 100 # Note that I'm starting at 100 rather than 1000
while count < 1000000000 :
count = count * 10
# Rest of your code goes here
一个经验丰富的python程序员可能不会因为上述问题而畏缩,但会说有更好的方法。更好的方法是从pythonmap
函数开始,以python列表理解结束。map
函数将一个函数和一个iterable(或一组iterable;map
是一个非常强大的工具)作为参数。映射的结果是通过将函数应用于iterable的每个元素而形成的列表。例如:
def pow10 (n) :
return 10**n
for count in map (pow10, range(3,9))
# Rest of your code goes here
上面的代码将其余部分应用于列表[1000、10000、100000、1000000、10000000、100000000]
。以上内容存在一些问题。首先,我必须定义一个函数pow10
,它很可能从未在其他任何地方使用过。Python有一个匿名函数的概念,使用lambda
关键字实现。通过使用lambda表达式,我们可以去掉该函数pow10
for count in map (lambda n : 10**n, range(3,9))
# Rest of your code goes here
我们还没有解决所有的问题。一个问题是使用map
和lambda
表达式,虽然肯定是python式的,但可能有点太深奥了。另一个问题是map
返回一个列表。最好使用只在需要时生成值的生成器。解决这两个问题的方法是python的列表理解概念。列表理解也使用匿名函数,但是隐含了lambda
。可以将列表理解看作是map
的一个更紧凑、更容易理解的版本。除了映射之外,列表理解还可以在应用匿名映射之前过滤掉一些东西。列表理解功能强大得令人难以置信。以下是使用列表理解的程序的开始:
for count in (10**n for n in range(3,9)) :
# Rest of your code goes here
现在还不完全清楚你请求帮助的是哪一部分,以及你不知道如何改变的那一部分做错了什么。我猜了一下(见我的答案);请编辑你的问题,这样我的猜测是对还是错就很明显了(如果是错的,那么下一个家伙就不必像我一样猜测和搞砸了)。老实说,我的任务并不完全清楚。我所知道的是,我需要能够通过使用嵌套循环来重现示例输出。从1000开始,乘以10将是1000、1010、1020、1030。。。。你想要10的幂。所以我会用“1000”替换所有的开始,用“100000000”替换停止,并将步长设置为“10”?这是[pow(10,x)表示范围(3,10)中的x]
一种python方法来实现这一点吗?@Ben:好吧,你不需要手动用常量替换变量,这就是函数的用途。只需将此函数添加到代码中,然后在代码中使用几何范围(1000100000000,10)
而不是范围(1000100000000,1)
。@AntonSavin:嗯,我可能会编写类似的代码。(我有很多代码使用2**x
或8@AntonSavin:另外,如果读者不必知道10
意味着log(1000000000,10)+1
,就可以想出一种更清晰的方法,但我想不出一个好的方法来做到这一点。(我不想真正写log(1000000000,10)+1
在代码中,那将是愚蠢的…)
for count in map (lambda n : 10**n, range(3,9))
# Rest of your code goes here
for count in (10**n for n in range(3,9)) :
# Rest of your code goes here