2015-04-20 45 views
1

我是新来的,我有一个关于我的Python代码的问题。它不会像我认为的那样执行。 该真实搞乱的部分是在嵌套而:嵌套while循环没有在Python中正确循环

import math 
mu=4*math.pi*10**(-7) ##mu naught 
I= 
float(input('Enter a value for the current measured in Amperes: ')) 
R=abs(float(input('Enter a value for the radius 
of the circle measured in meters: '))) ##radius 
step=R/200 ##Step size for integration 
B=[] ##array for B(r) 
J=[] 
Plot=[B,J] 

k = 1 ##step counter for Circumfrence 
j = 1 ##step counter for Radius 
b_temp = 0 ##place holder to sum b(step*k) 

D_Vector = [R*math.cos(k*math.pi/100),R*math.sin(k*math.pi/100)] 
R_Vector = [R-j*step,0] 

while(j*step<=R): 
    while(k*step<=2*math.pi*R): 
     r=(math.sqrt((R_Vector[0]-D_Vector[0])**2 + 
     (R_Vector[1]-D_Vector[1])**2)) 
     b_temp = b_temp + (mu/(4*math.pi))*I*step*step/(r**2) 
     k=k+1 
     D_Vector = [R*math.cos(k*math.pi/100),R*math.sin(k*math.pi/100)] 
     R_Vector = [R-j*step,0] 
     print(round(r,3), j) 
    B.append(round(b_temp,8)) 
    print('New j value!') 
    b_temp=0 
    J.append(round(step*j,3)) 

    j=j+1 

它应该下台半径(第一while循环),然后环周围的圆,求和线的各组块中的磁场贡献。出于某种原因,它不是循环通过内循环每次迭代的外循环,因为它应该是,我真的不知道为什么。新的J值线是让我看看它的循环正常了,这是我的输出:

... 
13.657 1 
13.884 1 
14.107 1 
14.327 1 
14.543 1 
14.756 1 
14.965 1 
15.17 1 
15.372 1 
New j value! 
New j value! 
New j value! 
New j value! 
New j value! 
New j value! 
New j value! 
New j value! 
... 

1.在每个浮点(半径值)的结束是第j值,它停留在1每个环绕着环...

+0

我想我应该提到一些行被打破,因为行太长,无法放入编辑框。所以I和R的输入都是一行一行,我想就是这样。 – Tyler

+0

什么是期望的输出? –

回答

1

您正在增加k,但从未将其重置为1。所以k * step变得越来越大,直到内循环的条件变为假。在哪一点很明显,它没有得到执行了。

请注意,当您只是遍历整数范围时,应避免使用while循环。只需使用for j in range(a, b)即可。这避免了你的代码中的错误。

如果我没有记错,你可以替换循环:

area = 2*math.pi*R 

for j in range(1, R//step + 1): 
    # j*step <= R holds 
    for k in range(1, area // step + 1): 
     # k * step <= area holds here 

其中a // bab商。

+0

非常感谢,一行修正了它。 – Tyler