for循环

1.循环

  • 循环是一个结构,导致程序要重复一定的次数。
  • 条件循环也是如此,当条件变为假,循环结束。

2. for 循环

  • for循环:
    • 在序列里,使用for循环遍历。

语法:

  • for iterating_var in sequence:
    statement(s)
    举例:
In [2]: a
Out[2]: [1, 2, 3, 4]

In [3]: for i in a:
   ...:     print i
   ...:     
1
2
3
4

3. 遍历序列:range

可以快速的生成一个序列
range(I, j, [,步进值])
- 如果所创建对象为整数,可以用range
- i为初始值,不选默认为0
- j为终止值,但不包括在范围内
- 步进值默认为1.
range(0,10)==(0,10,1),这里第三个参数是步长

In [4]: range(0,10)
Out[4]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

In [5]: range(0,10,1)
Out[5]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

In [6]: range(0,10,2)
Out[6]: [0, 2, 4, 6, 8]

所以经常for和range搭配

In [8]: for i in  range(0,10):
   ...:     print i
   ...:     
0
1
2
3
4
5
6
7
8
9

如果要取偶数:

In [9]: for i in  range(0,10):
   ...:     if i % 2 == 0:
   ...:         print i
   ...:         
0
2
4
6
8
#!/usr/bin/python
# -*- coding:utf8 -*-
# author: chawn
# date:
# 打印0-9中偶数的平方
for i in [i**2 for i in range(0,10) if i % 2 == 0]:
    print i

结果:

C:\Users\chawn\PycharmProjects\pyex\venv\Scripts\python.exe C:\Users\chawn\PycharmProjects\pyex\172701.py
0
4
16
36
64

1-100求和:

#!/usr/bin/python
# -*- coding:utf8 -*-
# author: chawn
# date:
# 计算1到100的和
sum = 0
for i in range(1,101):
    sum += i
print sum
  • xgrange返回的是对象,不占用资源。而range返回的是列表。
  • 建议多用xrange
In [14]: range(3)
Out[14]: [0, 1, 2]

In [15]: xrange(3) #直接写不返回值
Out[15]: xrange(3)

In [16]: for i in xrange(3):print i 
0
1
2

4. 遍历字典{}

取字典里的每个元素:
方法1:

In [18]: dict1
Out[18]: {'a': 100, 'b': 100}
In [20]: for i in dict1:
    print "%s  %s" % (i , dict1[i])
   ....:     
a  100
b  100

方法2:dict.items将字典变成列表,然后去列表里的每个值。dict.items可以换成dict.iteritems,其中dict.iteritems类似xrange.

In [21]: for i,j in dict1.items():print i,j 
a 100
b 100

举例1:创建乘法

#!/usr/bin/python
# -*- coding:utf8 -*-
# author: chawn
# date:
# 乘法
for i in xrange(1,10):
    for j in xrange(1,i+1):
        print "%s*%s=%s" % (i , j ,j*i)

但是这样会导致每个算式都会换行,因为print自带换行

C:\Users\chawn\PycharmProjects\pyex\venv\Scripts\python.exe C:/Users/chawn/PycharmProjects/pyex/171227/乘法.py
1*1=1
2*1=2
2*2=4
3*1=3
3*2=6
3*3=9
4*1=4
4*2=8
4*3=12
4*4=16
5*1=5
5*2=10
5*3=15
5*4=20
5*5=25
6*1=6
6*2=12
6*3=18
6*4=24
6*5=30
6*6=36
7*1=7
7*2=14
7*3=21
7*4=28
7*5=35
7*6=42
7*7=49
8*1=8
8*2=16
8*3=24
8*4=32
8*5=40
8*6=48
8*7=56
8*8=64
9*1=9
9*2=18
9*3=27
9*4=36
9*5=45
9*6=54
9*7=63
9*8=72
9*9=81

Process finished with exit code 0

可以在第一个print后加一个,再加一个print,即:

#!/usr/bin/python
# -*- coding:utf8 -*-
# author: chawn
# date:
# 乘法
for i in xrange(1,10):
    for j in xrange(1,i+1):
        print "%s*%s=%s" % (i , j ,j*i),
    print #到这里才换行

结果:

C:\Users\chawn\PycharmProjects\pyex\venv\Scripts\python.exe C:/Users/chawn/PycharmProjects/pyex/171227/乘法.py
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81

Process finished with exit code 0

5. 练习

习题

  1. 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。
  1. 打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
    程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。
  1. 两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
  1. 解答
#!/usr/bin/env python

res = []

for i in range(1,5):

    for j in range(1,5):

        for k in range(1,5):

            res.append(i10+k)

print(res)
  1. 解答
#!/usr/bin/env python

for i in range(100,1000):

    j = i / 100

    k = i / 10 % 10

    l = i % 10

    if i == j  3 + l ** 3:

        print(i)

或者

#!/usr/bin/python
# -*- coding:utf8 -*-
# author: chawn
# date:

for i in xrange(100,1000):
   if int(str(i)) == int(str(i)[0])**3 + int(str(i)[1])**3 + int(str(i)[2])**3 :
      print str(i)
  1. 解答
#!/usr/bin/python
# -*- coding:utf8 -*-
# author: chawn
# date:
#两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
list1 = ['a','b','c']
list2 = ['x','y','z']
for i in list1:
    if i == 'a':
        for j in list2:
            if j == 'x':
                continue
            print i,j
    elif i == 'c':
        for j in list2:
            if j == 'x':
                continue
            elif j == 'z':
                continue
            print i,j
    else:
        for j in list2:
            print i,j

你可能感兴趣的:(for循环)