title: What is the difference between these two while loops?
body: <pre><code>i = 0
  numbers = []
  
  while i &lt; 6:
      print "at the top i is %d" % i
      numbers.append(i)
      i = i + 1
      print "Numbers now:", numbers
      print "At the bottom i is %d" %i
  
  print "numbers:"
  
  for num in numbers:
      print num
  </code></pre>
  
  <p>This version can work correctly, but I modify this but can not work correctly, as follows:</p>
  
  <pre><code>i = 0
  numbers = []
  start_num = raw_input('&gt;&gt;&gt;')
  
  def show_num(start_num):
  global i
  while i &lt; start_num:
      print "At the top i is %d" %i
      numbers.append(i)
      i += 1
      print "Number now: ", numbers
      print "At the bottom i is %d" %i
  
  
  show_num(start_num)
  </code></pre>
  
  <p>The correct result is:</p>
  
  <pre><code>at the top i is 0
  Numbers now: [0]
  At the bottom i is 1
  at the top i is 1
  Numbers now: [0, 1]
  At the bottom i is 2
  at the top i is 2
  Numbers now: [0, 1, 2]
  At the bottom i is 3
  at the top i is 3
  Numbers now: [0, 1, 2, 3]
  At the bottom i is 4
  at the top i is 4
  Numbers now: [0, 1, 2, 3, 4]
  At the bottom i is 5
  at the top i is 5
  Numbers now: [0, 1, 2, 3, 4, 5]
  At the bottom i is 6
  numbers:
  0
  1
  2
  3
  4
  </code></pre>
  
  <p>but the second code shows the infinite one plus one plus...</p>
  
  <p>Why does the second code fail?</p>