2017-03-16 50 views
0

大家好我目前正在練習口譯代碼,並且寫下每一步的過程!這是我目前提出的。Python代碼一步一步瞭解代碼

x = 4 
y = 19 
finished = False 
while x <= y and not finished: 
    subtotal = 0 
    for z in range(0, x, 4): 
     print(x) 
     subtotal += x 
     print("This is subtotal", subtotal) 
     if y // x <= 1: 
      finished = True 
     else: 
      x += x 
      print("New x value:", x) 
  1. X = 4,Y = 19,成品=假,小計= 4,z = 0的
  2. X = 8,Y = 19,成品=假,小計= 8,z = 0的
  3. X = 16,Y = 19,成品=真,小計= 24,Z = 0

我相信我在這裏做是正確的,但我不知道小計會怎樣4-8到24?如果有人能夠向我解釋這將是偉大的。

我知道範圍是排他性的,所以當x值是4時,它只會經過for循環一次,因此小計= 4。但是當x值是8時,它會通過for循環到達我的站立2次,所以這是我迷路的部分。

我最後一個問題是每次它經歷這個循環時,每次x值改變時小計是否得到重置?這是否會成爲我無法獲得正確小計的原因?

如果有人可以直觀地向我展示或解釋它會很棒非常感謝!

+0

爲什麼不插入打印語句來報告值並運行代碼?這是追蹤這些價值的典型低技術方式。另外,還不完全清楚你用什麼過程來解釋代碼 - 你在什麼時候記錄這些值? – Prune

+0

我確實這樣做了,但我無法弄清楚價值觀是如何成爲他們正在成爲的。 – ProFesh

回答

0

只是檢查改動的變量:僅被重置爲0當內

Start: x = 4, y = 19, finished = False 
1.  subtotal = 0 
2.  z = 0 
3.  subtotal += x (0+4) = 4 
4.  x += x (4+4) = 8 
5.  subtotal = 0 
6.  z = 0 
7.  subtotal += x (0+8) = 8 
8.  x += x (8+8) = 16 
9.  z = 4 
10.  subtotal += x (8+16) = 24 
11.  finished = True 
End: x = 16, y = 19, finished = True, z = 4, subtotal = 24 

subtotal循環退出,如x變大,內循環重複次數多,1第一次,2第二次。

+0

只是爲了澄清從第3行到第7行,我很好奇它爲什麼不改變爲12,因爲目前小計有4,然後當你加8時它不是12?如果你能爲我澄清這將是偉大的!感謝您的快速響應! – ProFesh

+0

當第5行退出內循環時,「小計」被重置爲「0」。 – AChampion

+0

好吧,更有意義!爲什麼從第7行到第11行不能重置,但另一個呢?我很抱歉所有的問題。我在這方面花了相當多的時間,真的很想理解它! – ProFesh

0

這是因爲在第一個循環中小計爲0. for循環僅迭代一次,因爲它看起來像這樣for z in range(0, 4, 4)。然後x和小計變成4.現在小計被帶回0,並且for循環變成for z in range(0, 8, 4),所以這次for循環會迭代兩次,因爲該範圍中有兩個可能的數字(它們是0和4),小計被添加到x爲8,x爲16,for循環迭代(注意小計不會回到0,因爲subtotal = 0語句不在for循環中)再次使小計現在爲8 + 16.這是24 。