【问题标题】:find the general case of while loops找出while循环的一般情况
【发布时间】:2018-07-13 02:57:01
【问题描述】:

我正在使用 python 列表作为以下代码:

x=[0.1,0.1,0.1]
dx=0.1
R=1
while x[0] < R:
  while x[1] < R:
    if np.sqrt(x[0] ** 2 + x[1] ** 2 + x[2] ** 2) < R:
      x[2] = x[2] + dx           
     counter = counter + 1
    else:

       x[1] = x[1] + dx
       x[0]= dx
 print(counter)
  x[0] = x[0] + dx
  x[1] = dx

但对于更大的列表,例如:

x=[0.1,0.1,0.1,0.1]
dx=0.1
#we have to add another while loop 
while x[0]<R:
     while x[1]<R:
         while x[2]<R:
           if np.sqrt(x[0] ** 2 + x[1] ** 2 + x[2] ** 2) < R:
                  x[3] = x[3] + dx           
                  counter = counter + 1
            else:

                   x[2] = x[2] + dx
                   x[1]= dx
         x[1] = x[1] + dx
         x[2] = dx
    x[0]=x[0]+dx
    x[1]=dx

等等 我想要做的是找到一种方法来为任意数量的元素的任何列表实现此代码(一般情况) 但我不知道如何将这些 while 循环转换为任意数量的维度(数组中的元素数量)

以防万一这段代码会执行以下操作:

example: for dx=0.1 and R=1 and we start with 0.1

start with x=[0.1, 0.1, 0.1] (after the first loop) x=[0.9, 0.1, 0.1] And then [0.1, 0.2, 0.1] And so on until [0.9, 0.9, 0.1] After we will get [0.1,0.1,0.2] And we will start again with [0.2, 0.1, 0.2] and so on

任何帮助将不胜感激

【问题讨论】:

  • 您能先解释一下您打算做什么吗? 通常,当您的代码中有超过 2 个嵌套循环时,有一种更好的方式来组织您的代码。
  • 乍一看,这看起来像是一个非常简单的递归函数。
  • 也就是说,if np.sqrt(x[0] ** 2 + x[1] ** 2 + x[2] ** 2) &lt; R: 行在两种情况下是否相同?
  • 示例:对于 dx=0.1 和 R=1,我们从 0.1 开始,这就是我想要做的:从 x=[0.1, 0.1, 0.1] 开始(在第一个循环之后)x =[0.9, 0.1, 0.1] 然后是 [0.1, 0.2, 0.1] 以此类推直到 [0.9, 0.9, 0.1] 之后我们将得到 [0.1,0.1,0.2] 并且我们将从 [0.2, 0.1, 0.2] 等等
  • Grokking 涉及更多地关注问题空间(而不是 Python 语法/逻辑/最佳实践),而不是我愿意在早上的这个时候免费提供。您能否将问题集中在 Python 方面,隔离出数学/逻辑?

标签: python list loops numpy while-loop


【解决方案1】:

我同意 cmets 的观点,几乎可以肯定有更好的方法来做到这一点。但是,这个(快速组合在一起)递归函数将完成并编辑您的数组 x

def f(x, dx, n=0):
    if n == len(x) - 2:
        while x[n] < R:
           if np.sqrt(sum(i**2 for i in x[:-1])) < R:  # I think you mean this
              x[n+1] += dx           
              counter += 1
           else:
              x[n] += dx
              x[n-1] = dx
    else:
        while x[n] < R:
            f(x, dx, n+1)  # recursion
            x[n] += dx
            x[n+1] = dx

【讨论】:

  • 谢谢,但这并不是我想要的,它给了我不同的结果。我会尝试编辑它以获得我想要的东西。不过还是谢谢你
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-05
  • 1970-01-01
  • 1970-01-01
  • 2013-06-25
  • 2011-04-22
  • 2012-01-02
  • 2016-06-09
相关资源
最近更新 更多