循环for

摘要

循环 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)))

转载于:https://www.cnblogs.com/siaspedro/p/8120668.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值