for循环
for循环用在序列里,循环遍历序列中的元素
语句格式:
for iterating_var in sequence:
statement
for循环不仅可以遍历列表还能遍历字典
for k in dict1:print k ##遍历字典中的key
for k in dict1:print k,dict1[k] ##遍历字典中的key和value
for k in dict1.items():print k ##遍历字典中key、value组成的元组
for k,v in dict1.items(): print k,v ##遍历字典中的key和value,items方法返回的是列表
for k,v in dict1.iteritems(): print k,v ##同上条,iteritems方法返回的是个对象
for else语句
for ...:
if ...:
..../pass
break/continue/sys.exit()
else:
...
只有for循环正常结束才会执行else语句
break退出循环
continue退出本次循环
pass什么也不执行,占位
sys.exit()退出程序
range()函数
range()函数可创建一个整数列表
range([start,] stop[, step])
start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)
start和step不是必须的,stop必须有
xrange()函数
xrange() 函数用法与 range 完全相同,所不同的是生成的不是一个列表,而是一个生成器。
数字序列很大时,xrange()相对range()性能更好,不会占用很大内存空间,循环中使用xrange性能更好
while循环
for循环用在有次数的循环上
while循环用在有条件控制的循环上
while expression:
statement
while循环直到表达式为假时才退出,表达式是个逻辑判断,必须返回一个True或False
while语句
while ...:
if ...:
..../pass
break/continue/sys.exit()
else:
...
跟for循环一样,else语句也要等while正常退出时才会执行
练习1
- 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。
#!/usr/bin/python
a = [1,2,3,4]
for i in a:
b = i * 100
for j in a:
if j != i:
s = j * 10
for k in a:
if k != i and k != j:
t = b + s + k
print t
- 打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。
#!/usr/bin/python
for i in xrange(100,1000):
bai,shi,ge = i/100,i%100/10,i%10
if i == bai**3 + shi**3 + ge**3:
print i
- 两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
#!/usr/bin/python
# -*- coding:utf-8 -*-
l1 = ['x','y','z']
for a in l1:
for b in l1:
for c in l1:
if a != b !=c != a and a != 'x' and c != 'x' and c != 'z':
print "a --> %s, b --> %s, c --> %s" % (a, b, c)
练习2
- 将一个正整数分解质因数。例如:输入90,打印出90=2 * 3 * 3 * 5。
程序分析:对n进行分解质因数,应先找到一个最小的质数i,然后按下述步骤完成:
(1)如果分解后商为1,则说明分解质因数的过程已经结束,打印出即可。
(2)如果商不为1,则应打印出i的值,并用n除以i的商,作为新的正整数进行分解,
重复执行第一步。
(3)如果n不能被i整除,则i的值加1,重复执行第一步。
#!/usr/bin/python
# -*- coding: utf-8 -*-
n = raw_input("please input a number:")
if n.isdigit():
n = int(n)
i = 2
if n == i:
print n
else:
while n >= i:
k = n % i
if k == 0:
print i
n = n / i
else:
i += 1
else:
print "%s is not a number!" % n
- 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
程序分析:采取逆向思维的方法,从后往前推断。
#!/usr/bin/python
# -*- coding:utf-8 -*-
n = 1
for i in range(9):
n = ( n + 1 ) * 2
print "第%s天的桃子数:%s" % ((9 - i), n)