2.2 流程控制-for序列
python中主要的流程控制有for循环和while循环
循环是一个结构,导致程序要重复一定的次数。
条件循环也是如此,当条件变为假,循环结束
-
for循环 在序列里,可以用for循环进行遍历
a='ABC' for i in a : print i \可以在后面加“,”来不输出换行符
-
range
help(range)
range([start,]stop[,step]) \start 默认为0,step 默认为1 ,step是步长;stop不包含在输出中,比如遍历[1-10],for i in range(1,11)
-- 列表重写
[i**2 for i in range(1,11) if i % 2 != 0 ] \\ 1-10里面奇数平方写入列表中
python3中range即为py2中的xrange,写xrange会报错
2.3 流程控制-for字典
dic1 = {"name":"zx","age":"18"}for k in dic1: print k , dic1[k] for i in dic1.iteritems(): \\.iteritems()类似于xrange print ifor k,v in dic1.iteritems() : print k,v
输出九九乘法表
for i in range(1,10): for j in range(1,i+1): a = i * j if a < 10: print "{0} * {1} = {2} |".format(j,i,a), else: print "{0} * {1} = {2} |".format(j,i,a), if j == i : print ""
2.4 循环退出
for 循环也有else,在for循环正常结束后使用
for i in range(0,10): print ielse print 'end'
break 退出当前循环 continue 退出本次循环,进行下次循环 exit 退出脚本
2.5 流程控制-while
while循环,直到表达式变为假才退出循环,表达式是一个逻辑表达式,必须返回True或者False。
while expression : statements(s) while 1 : print "Hello " \\可以while True : 但不能 while False :
练习
练习 1
- 有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比,请编程序找出三队赛手的名单。
1、4个不同数字3个随机排列(4个数字不含0)
n = 0for i in range(1,5): for j in range(1,5): for q in range(1,5): if i != j and i != q and j !=q : n += 1 print "{0}{1}{2}".format(i,j,q)print n---------123132213231312321
2、 水仙花数
n = 0for i in range(1,10): for j in range(0,10): for q in range(0,10): if i ** 3 + j ** 3 + q ** 3 == i * 100 + j * 10 + q : n += 1 print "{0}{1}{2}".format(i,j,q) print n---------153370371407
3、 比赛
n = 0l1 = ['a','b','c']l2 = ['x','y','z']dic = {}l = []for i in l1: for j in l1: for q in l1: if i != j and i != q and j !=q : n += 1 l.append(i) l.append(j) l.append(q) dic = dict(zip(l,l2)) if dic['a'] != 'x' and dic['c'] == 'y': print dic l = [] ---------{'a': 'z', 'c': 'y', 'b': 'x'}
练习2
-
将一个正整数分解质因数。例如:输入90,打印出90=233*5。 程序分析:对n进行分解质因数,应先找到一个最小的质数i,然后按下述步骤完成: (1)如果分解后商为1,则说明分解质因数的过程已经结束,打印出即可。 (2)如果商不为1,则应打印出i的值,并用n除以i的商,作为新的正整数进行分解, 重复执行第一步。 (3)如果n不能被i整除,则i的值加1,重复执行第一步。
-
猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。 程序分析:采取逆向思维的方法,从后往前推断。
1、
import sysn = input()stat = 0l = []if n == 1 : print "n = 1 is prime number!"while n != 1 : for i in range(2,n+1): if n % i == 0 : l.append(i) if i == n : print "n = {0} is prime number !".format(n) sys.exit() n /= ifor i in l : if stat == 0 : print "{0}".format(i), stat += 1 else : print " * {0}".format(i),
2、
m = 1n == 10while n > 1 : m += 1 m *= 2 n -= 1print m---------1534