3.4 循环:for

 for语句语法
for i in range(m,n):
   语句
 for需要一个数据容器,然后从里面逐个取数据,而range是一个函数,它将制造一个从m到n(包括m但不包括n)的序列,而i将遍历这个序列。
下面的代码将打印1到9,注意并不包括10
for i in range(1,10):
    print(i)

range还可以只有一个参数,下面这段代码将打印0到9:
for i in range(10):
    print(i)
注意,是从0到9,10不包括在内。

range还有第三个参数,表示步长,
下面这段代码将打印1到100的奇数,因为步长是2,从1开始到10就全是奇数了
for i in range(1,10,2):
    print(i)
思考一下打印30以内的偶数该怎么写?

步长还可以是负数,下面将打印10、9、8、……3、2、1
for i in range(10,0,-1):
    print(i)

for的格式使得写代码的人,不需要写循环变量的递增或递减,不容易写出死循环。
for语句本质上和while语句一样,但for循环一般用来遍历一个序列,字符串等,不能把一个条件直接作为for循环的判断条件,例如a>b这种。

练习题

  • 下面的代码试图去打印1到10,如果有错误,指出来:
    1. (2分) [选择]
    A.
    B. 打印正确
    C. 语法错误
    D. 语法正确,不是死循环但也不能正确打印
    E. 死循环
    <code><div class='codeNewLine'>i=1</div><div class='codeNewLine'><span class='keyword'>for</span> i <= 10:</div><div class='codeNewLine'>    <span class='pyFunction'>print</span>(i)</div><div class='codeNewLine'>    i=i+1</div></code>
    
    2. (2分) [选择]
    A.
    B. 打印正确
    C. 语法错误
    D. 语法正确,不是死循环但也不能正确打印
    E. 死循环
    <code><div class='codeNewLine'><span class='keyword'>for</span> i <span class='keyword'>in</span> i <=10:</div><div class='codeNewLine'>     <span class='pyFunction'>print</span>(i)</div><div class='codeNewLine'>     i+=1</div></code>
    
    3. (2分) [选择]
    A.
    B. 打印正确
    C. 语法错误
    D. 语法正确,不是死循环但也不能正确打印
    E. 死循环
    <code><div class='codeNewLine'><span class='keyword'>for</span> i <span class='keyword'>in</span> <span class='pyFunction'>range</span>(10):</div><div class='codeNewLine'>    <span class='pyFunction'>print</span>(i)</div></code>
    
    4. (2分) [选择]
    A.
    B. 打印正确
    C. 语法错误
    D. 语法正确,不是死循环但也不能正确打印
    E. 死循环
    <code><div class='codeNewLine'><span class='keyword'>for</span> i <span class='keyword'>in</span> <span class='pyFunction'>range</span>(1,11):</div><div class='codeNewLine'>    <span class='pyFunction'>print</span>(i)</div></code>
    
    5. (2分) [选择]
    A.
    B. 打印正确
    C. 语法错误
    D. 语法正确,不是死循环但也不能正确打印
    E. 死循环
    <code><div class='codeNewLine'><span class='keyword'>for</span> i <span class='keyword'>in</span> <span class='pyFunction'>range</span>(0,10):</div><div class='codeNewLine'>    <span class='pyFunction'>print</span>(i)</div></code>
    
  • 编程题
    1. (2分) [填空]
    上面的代码会打印        
    2.下面的代码用for循环打印1到16,补齐代码使功能完善 (2分) [编程填空]
    <code><div class='codeNewLine'><span class='keyword'>for</span>         :</div><div class='codeNewLine'>    <span class='pyFunction'>print</span>(n)</div></code>
    
    3.打印1到10,然后10到1,10只出现一次。 (10分) [编程]
    提示:使用两个for循环。
    4.(*)输入一个整数k,然后打印“ok”,打印的次数就是整数k的大小 (10分) [编程]
    提示:输入的整数k作为循环变量的上限
    5.打印100(包括100)以内的偶数。 (10分) [编程]
    使用range的第三个参数设置步长为2
    6.打印100以内7的倍数。 (10分) [编程]
    7.打印100(包括100)以内的不能被3整除的整数。 (10分) [编程]
    8.(***)输入一个整数n,然后打印出它所有的因子 (10分) [编程]
    9.求1+2+3+…+100的值,并打印出最终的和 (10分) [编程]
    10.循环5次,每次循环输入一个整数,把这个数字赋给整型变量k,最后打印总和和平均值(两个值打印各占一行,先打印总和再打印平均值)。 (10分) [编程]
    提示:把输入语句放到循环内部。
    11.计算1*2+3*4+5*6+…+99*100并打印结果 (10分) [编程]
    提示:i每次和i+1相乘,i增加的步长是2