Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:以10的倍数执行计算的嵌套循环_Python_Loops_Math_Nested Loops - Fatal编程技术网

Python:以10的倍数执行计算的嵌套循环

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

我对使用python还不熟悉,这个程序的目标是让它向自身添加(1/2)和(1/3)很多次,如下图所示。我认为我需要做的是让外循环确定从“1000”开始,然后以10的倍数增加多少次(1000、10000、100000等)。内部循环是我想要实际添加(1/2)和(1/3)的地方。下面是我目前编写的代码,它没有按照我的要求执行,以及代码应该执行的示例输出。我想我走对了我只是不知道还能做什么,我觉得我已经尝试了一切。在此方面的任何帮助都将不胜感激!谢谢

我的代码:

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程序员可能不会因为上述问题而畏缩,但会说有更好的方法。更好的方法是从python
map
函数开始,以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