簡體   English   中英

嵌套的while循環無法在python中正確循環

[英]Nested while loop not looping properly in python

我是新手,我對我的python代碼有疑問。 它沒有像我認為的那樣執行。 混亂的部分在嵌套的while中:

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 ...

您在增加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商。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM