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