流程控制-for序列,字典
1、for 循环简介
(1) for 用于 python 中的循环,在条件循环中,如果条件变为假则循环结束
(2) 在序列里,使用 for 循环遍历(列表,元组,字符串)
In [1]: a = {1:'a', 2:'b', 3:'c'}
In [2]: for k,v in a.it
a.items a.iteritems a.iterkeys a.itervalues
In [2]: for k,v in a.items():
...: print k,v
...:
1 a
2 b
3 c
(3)加上,表示去除换行\n
range的理解:
range(10):表示从0开始到9,总共10个数
range(1,12):表示从1开始到11
rang(1,12,3):3表示间隔
range和xrange的区别:
range(10),占用内存资源
xrange(10),不占用内存资源,当循环的时候就占用,for i in xrange(10):,所以循环就使用xrange减少内存消耗
[root@centos7-3 python]# vim for1.py
#!/usr/bin/python
for i in [i**2 for i in range(1,11)]:
print i,
(4)打印基数
[root@centos7-3 python]# vim for1.py
#!/usr/bin/python
for i in [i**2 for i in range(1,11) if i%2 != 0]:
print i,
(5)打印九九乘法表
当i=1时,那就是for j in xrange(1,2):那j的取值还是1,print 后面的,表示每次循环的结果都横着输出,最好一行的print 就是for结束循环后换行
1x1 =1
2x1 =2 2x2 =4
3x1 =3 3x2 =6 3x3 =9
4x1 =4 4x2 =8 4x3 =12 4x4 =16
5x1 =5 5x2 =10 5x3 =15 5x4 =20 5x5 =25
6x1 =6 6x2 =12 6x3 =18 6x4 =24 6x5 =30 6x6 =36
7x1 =7 7x2 =14 7x3 =21 7x4 =28 7x5 =35 7x6 =42 7x7 =49
8x1 =8 8x2 =16 8x3 =24 8x4 =32 8x5 =40 8x6 =48 8x7 =56 8x8 =64
9x1 =9 9x2 =18 9x3 =27 9x4 =36 9x5 =45 9x6 =54 9x7 =63 9x8 =72 9x9 =81
(6)
contine:退出当前循环,contine下面的语句不会执行
break:退出整个循环
pass:占位,还没想好怎么写先占位,什么都不做
sys.exit:全部整个脚本,相当于shell的exit 0
[root@centos7-3 python]# cat for2.py
#!/usr/bin/pthon
import sys
import time
for i in xrange(10):
if i == 3:
continue
elif i == 5:
continue
elif i == 6:
pass
elif i == 7:
sys.exit()
print i,
else:
print 'main end'
print 'END'
结果:[root@centos7-3 python]# python for2.py
0 1 2 4 6
(7)取随机数
In [40]: import random
#猜数字
#系统生成一个20以内的随机整数,玩家有6次机会进行猜猜看,每次猜测都有反馈(猜大了,猜小了,猜对了就介绍),6次中,猜对了,玩家赢,否则系统赢
#随机数
import random
for i in range(6):
guess_num=int(raw_input('Please guess a num: '))
system_num=random.randint(1,20)
print 'system num is %d' %system_num
if guess_num<=20:
if guess_num>system_num:
print 'you guess big num'
elif guess_num<system_num:
print 'you guess small num'
else:
print 'guess yes'
break
else:
print 'guess (1,20)'
break
else:
print 'you input many 6 second'
- 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。
#permutations(p[,r]);返回p中任意取r个元素做排列的元组的迭代器
#itertools用于高效循环的迭代函数集合import itertools a = ['1', '2', '3','4'] b = 4 for i in itertools.product('1234','1234','1234'): if i[0]==i[1] or i[0]==i[2] or i[1]==i[2]: continue print i[0]+i[1]+i[2]
方式二:
for i in '1234':
for j in '1234':
if i==j:
continue
for k in '1234':
if i==k or j==k:
continue
print i+j+k
3、打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
#程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。
import math
for i in range(100,999):
x=math.floor(i/100) #获取百位数
y=math.floor((i-x*100)/10) #获取十位数;比如i=555,x=5;(555-5*100)/10
z=math.floor(i-x*100-y*10) #获取个位数;比如i=555 x=5;y=5;z=555-5*100-5*10;
if i == x**3+y**3+z**3:
print i,
方式二:更容易理解点
for i in range(100,1000):
j=i//100#取百位数,//取整除 - 返回商的整数部分;如546//100 ,取5整数部分
k=(i%100)//10 #取十位数;如536%100取余数为36,然后36//10,相当于30/10 就是3
p=i%10 #取个位数;如536%10取余数就是6,因为10*53=530,6就是余数
if i==(j**3+k**3+p**3):
print i
4、 两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
a选队友,b选队友,if a的队友和b的队友不一样,再if a,b,c的队友都不一样,然后再if a,x不等,c,x,z不等,再打印出来
list1=['x', 'y', 'z']
for a in list1:
for b in list1:
if a!=b:
for c in list1:
if a!=c and b!=c:
if a!='x' and c!='x' and c!='z':
print 'a-{0},b-{1},c-{2}'.format(a,b,c)
结果:
a-z,b-x,c-y