摘要
循环 for
目的
- 掌握循环for的使用方法
- 可迭代对象
内容
for
- 条件:计算机能计算成千上万次的重复运算,我们就需要循环语句。
- 两种循环方法:for 、while
- for的常见使用方法
#for...in循环
#打印1到9
print(type(xrange(1,10)))
for i in xrange(1,11):
print(i)
#range()函数,可以生成一个整数序列
#xrange()返回结果是一个对象,只要调用是才写进内存,节省资源
#1到100 求和
sum = 0
for i in xrange(1,101):
sum = sum + i
print(sum)
#乘法表
for i in xrange(1,10):
for j in xrange(1,i+1):
print('{0} * {1} = {2}'.format(j,i,j*i) )
#回顾知识格式化输出
列表生成式、生成器、迭代器
- 列表生成式则可以用一行语句代替循环生成相应的list:
#例子 生成[1x1, 2x2, 3x3, ..., 10x10]
#普通方式
L = []
for i in range(1,11):
L.append(i*i)
#生成式方式
[x * x for x in range(1, 11)]
#写列表生成式时,把要生成的元素x * x放到前面,后面跟for循环,就可以把list创建出来
生成器
why 为啥要有生成器
内存限制,生成式中元素过多是会占用过多内存;
who 啥是生成器
名字 生成器:generator
概念:列表元素可以按照某种算法推算出来,不必创建完整的list
how怎么生成使用
第一种:把一个列表生成式的[]改成()
next() 打印下一个值;
for循环输出整个生成器:
g = (x * x for x in range(10))
for n in g:
print(n)
第二种:如果一个函数定义中包含yield关键字,就是一个生成器
-迭代器
for循环的数据类型有以下几种:
一类是集合数据类型,如list、tuple、dict、set、str等;
一类是generator,包括生成器和带yield的generator function。
可以直接作用于for循环的对象统称为可迭代对象:Iterable
可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator
生成器都是Iterator对象,但list、dict、str虽然是Iterable,却不是Iterator。
总结
- for 循环的使用
- 生成器、迭代器的概念
习题完成情况
# 1. 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
# 1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列 1. 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
x = 0
for i in xrange(1,5):
for j in xrange(1,5):
for k in xrange(1,5):
if i != j and j != k and k != i:
print('{0}{1}{2}'.format(i,j,k))
x += 1
print('总数:{0}'.format(x))
# 2. 打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
# 程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。
for i in xrange(100,1000):
#k 个十百位数三次方的和
k = 0
for j in str(i):
k += int(j)**3
#判断是不是水仙花数
if k == i:
print(i)
# 3. 两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
import re
# 定义两队
S1 = 'abc'
S2 = 'xyz'
#去除已经排好的
d ,e,f = '','',''
for p1 in S1:
for p2 in S2:
if p1 == 'c'and p2 not in 'xz':
print('{0}:{1}'.format(p1,p2))
d = p1
e = p2
#去除排列好的
S1 = re.sub(d,'',S1)
S2 = re.sub(e,'',S2)
#重新排列
for p1 in S1:
for p2 in S2:
if p1 == 'a'and p2 !='x':
print('{0}:{1}'.format(p1,p2))
d = p1
e = p2
#打印最后一组
print('{0}:{1}'.format(re.sub(d,'',S1),re.sub(e,'',S2)))