2020-09-25 循环

day3-循环-(for循环-while循环-continue和break-else)

python中的循环有两种:for循环和while循环

  1. for 循环

    """
    语法:
    for 变量 in 序列:
     循环体
    
    说明:
    for/in  -  关键字,固定写法
    变量     - 可以是任意变量;一般写一个新的变量
    序列    -  Python中容器性数据类型;例如:字符串、列表、字典、元祖、集合、迭代器、生成器、range...
    冒号    -  固定写法
    循环太   - 和for保持一个缩进的一条或者多条语句
           需要重复执行的代码块
           
    执行过程:
    让变量去序列中取值,一个一个的取,取完为止,每取一个值执行一个循环体
    (for循环次数看序列中元素的个数)
    """
    # 例如:
    for i in 'abcde':
        print(i,'hello')  # 因为此序列元素有5个 会打印5条 hello 
    
  1. range的用法

    """
    1)range(N)  -  产生一个 0 - N-1的数字序列:0,1,2,3...N-1(N必须是整数)
    2)range(M,N) - 产生 M - N-1的数字序列: M,M+1,M+2,M+3,...N-1(M和N都是整数并且M小于N)
    3)range(M,N,step) - step控制每次增加的值(默认是1):M,M+step,M+step...N-1
    """
    count = 0
    for i in range(10):
        count += 1
        print('我爱千锋{}次'.fromat(count))
    
    for y in range(10,100,10):
        print('y',y)
    

    练习:产生 100到1所有数字对应的序列

    for i in range(100,0,-1):
        print(i)
    

    练习:求和套路; 计算1+...100的和

    sum = 0
    for i in range(100):
        sum += i
    print(sum)
    

    统计个数:统计0-100中能被3整除的偶数个数

    count = 0
    for y in range(101):
     if y % 3 == 0 and y & 1 == 0:
         count += 1
    print(count)
    
    count = 0
    for num in range(0,101,6):
     count += 1
    print(count)
    
    

    求1000以内能被7整除但是不能被3整除的数的和

    # 方法一:
    sum = 0
    for i in range(1000):
        if i % 7 == 0 and i % 3 != 0:
            sum += i
    print(sum)
    
    # 方法二:
    sum = 0
    for i in range(0,1000,7):
        if i % 3 != 0:
            sum += i
    print(sum)
    

    统计1000以内十位数加上个位数的和等于5的个数

    count = 0
    for i in range(1000):
        if i % 100 //10 + i % 10 == 5:
            count += 1
    print(count)
    
while循环
  1. while循环

    """
    语法:
    while 条件语句:
     循环体
     
    说明:
    while  - 关键字,固定写法
    条件语句  - 除了赋值语句以外的表达式
    冒号   -  固定写法
    循环体   - 和while保持一个缩进
            重复执行的代码
    执行过程:
    先判断条件语句是否为True,为True就执行循环体
    执行完循环体再判断条件语句是否为True,为True再执行循环体
    ...直到条件语句的结果为False整个循环体就结束了
    
    while 控制次数的套路
    变量= 0
    while 变量 < 次数:
     需要重复执行的循环体
     变量 += 1
    """
    
    num = 0
    while num < 5:
        print('===')
        num += 1
        
    # 执行过程
    """
    num = 0; num < 5 --> True --> print('=====')
    num = 1; num < 5 --> True --> print('=====')
    num = 2; num < 5 --> True --> print('=====')
    num = 3; num < 5 --> True --> print('=====')
    num = 4; num < 5 --> True --> print('=====')
    num = 5; num < 5 --> False --> 循环结束!
    """
    
  1. for循环和while循环的选择

    什么时候用for循环:

    1)遍历序列(将序列中的元素一个一个取出来)

    2)循环次数确定

    什么时候用while循环

    1)是循环

    2)循环次数不确定

    练习:写程序实现不断输入数据,直到输入的内容为0为止

    # 方法一 :
    value = input('请输入:')
    while  value != '0':
        value = input('请输入:')
    
    # 方法二:
    while True:
        value = input('请输入:')
        if value == '0'
         break
    
    continue和break

    continue和break只能在循环体中使用

    1. continue - 结束本次循环(在实际开发中一般写在条件语句里面)

      如果在执行的时候遇到continue,那么当次循环结束直接进入下次循环

      for x in range(5);
        print('====')
          continue
          print(+++++)
          
      # ====
      # ====
      # ====
      # ====
      # ====
      
      count = 0
      for x in range(10):
          if x % 3 == 0:
            continue
          count += 1
      """
      count = 0
      x = 0: if 0 % 3 == 0 --> True: continue
      x = 1: if 1 % 3 == 0 --> False: count += 1  count = 1
      x = 2: if 2 % 3 == 0 --> False: count += 1  count = 2
      ...
      
      """
      
      
  1. break - 结束整个循环

    如果执行循环体的时候遇到break,那么整个循环直接结束

    num = 0
    while num < 5:
        print('====')
        break
        print(-----)
        num += 1
        
    # ====
    
    
  2. while循环的用法

    while True:

    ​ 需要重复执行的操作

    ​ if 循环结束的条件

    ​ break

    # 猜数字
    """
    随机产生一个0-100数字:num,用户不断输入数字直到输入的值和产生的随机值相等游戏结束
    """
    from random import randint
    num = randint(0,100)
    count = 0
    while True:
        num1 = int(input('猜猜0--100的数字:'))
        count += 1
        if num1 == num:
          print('恭喜你,count,次就猜对了')
        elif num1 > num:
            print('大了,能猜的小点嘛!')
        else:
            print('小了,能猜的再大点嘛!')
            
            
    num1 = randint(1,100)
    num2 = int(input('猜猜1-100的整数数字:'))
    count = 0
    while num1 != num2:
        count += 1
        if num2 > num1:
            print('大了,能猜的小点嘛!')
            num2 = int(input('猜猜1-100的整数数字:'))
          elif num2 < num1:
            print('小了,能猜的再大点嘛!')
            num2 = int(input('猜猜1-100的整数数字:'))
    else:
        count += 1
        print('恭喜你,count,次就猜对了')continue和break
    
else
  1. 完整的for循环和while循环

    """
    for 变量 in 序列:
        循环体
    else:
        代码块
        
    while 条件语句:
        循环体
    else:
        代码块
        
    else不影响循环体的执行;else后面的代码块在循环正常结束的时候会执行,如果循环因为遇到break而结束,else后面的代码就不会执行
    """
    
    for i in range(5):
        if i == 3:
            break
        print('===')
    else:
        print('else')   # 不会执行
    

基础题

  1. 根据输入的成绩的范围打印及格 或者不及格

    while True:
        score = float(input('请输入你的英语成绩:'))
        if score >= 60:
            print('及格')
        else:
            print('不及格')
    
  1. 根据输入的年纪范围打印成年或者未成年,如果年龄不在正常范围内(0~150)打印这不是人!

    while True:
        age = int(input('输入你的年龄:'))
        if 1 <= age < 18:
            print('你还未成年!')
        elif 18 <= age <150:
            print('恭喜你,成年了!')
        else:
            print('这不是人!')
    
  1. 输入两个整数a和b,若a-b的结果为奇数,则输出该结果,否则输出提示信息a-b的结果不是奇数

    while True:
        a = int(input('请输入第一个数:'))
        b = int(input('请输入第二个数:'))
        if (a - b) & 1:
            print('a-b的结果为奇数:',a-b)
        else:
            print('a-b的结果不是奇数')
            
    # 方法二:       
    result = (a - b) if (a - b) & 1 else '不是奇数'
    print(result)
    
    
  1. 使用while循环输出 0~100内所有3的倍数。

    num = 0
    while num < 100:
        if num % 3 == 0:
            print(num)
        num += 1
    
  1. 使用while循环输出0~100内所有的偶数。

    num = 0
    while num < 100:
        if num & 1 == 0:
            print(num)
        num += 1
    

进阶题

  1. 使用循环计算1*2*3*4*...*10的结果。

    num = 1
    for i in range(1,11):
        num *= i
    print(num)
    
  1. 统计100以内个位数是2并且能够被3整除的数的个数。

    # 方法一:
    count = 0
    for i in range(100):
        if i % 10 == 2 and i // 3 == 0:
            count += 1
    print(count)
    
    # 方法二:
    count = 0
    for i in range(0,100,3):
        if i % 10 == 2:
            count += 1
    print(count)
    
    # 方法三:
    count = 0
    for i in range(2,100,10):
        if i % 3 == 0:
            count += 1
    print(count)
    
  1. 输入任意一个正整数,求他是几位数?

    注意: 这儿不能使用字符串,只能用循环

    # 方法一:
    while True:
        num = int(input('输入任意一个正整数:'))
        n = str(num)
        print('这个数是:',num,'它是{}为数'.format(len(n)))
    
    # 方法二:
    num = int(input('输入任意一个正整数:'))
    count = 0
    while True:
        num //= 10
        count += 1
        if num == 0:
            break
    print(count)
    
  2. 打印出所有的水仙花数,所谓水仙花数是指一个三位数,其各位数字⽴方和等于该数本身。例如:153是

    ⼀个⽔仙花数,因为 1³ + 5³ + 3³ 等于 153。

    for i in range(100, 1000):
        ge = i % 10
        shi = i // 10 % 10
        bai = i // 100
        if ge ** 3 + shi ** 3 + bai ** 3 == i:
            print('水仙花数为:',i)
            
    # 水仙花数为: 153
    # 水仙花数为: 370
    # 水仙花数为: 371
    # 水仙花数为: 407
    

挑战题

  1. 判断指定的数是否是素数(素数就是质数,即除了1和它本身以外不能被其他的数整除的数)

    '''
    思路:N是否是素数就看在2 - N-1 之间有没有一个数能够被N整除
    '''
    
    num = 45
    if num == 0 or num == 1:
        print('不是素数')
    #方法一:
    for i in range(2,num):
        if num % i == 0:
            print('不是质数')
            break
    else:
        print(num,'是质数')
    
    # 方法二:(优化次数)
    num = 110
    for i in range(2,int(num**0.5+1):
        if num % i == 0:
            print('不是素数')
            break
    else:
        print('数素数')
    
  1. 求斐波那契数列列中第n个数的值:1,1,2,3,5,8,13,21,34.... (这儿的n可以是任意正整数,可以通过输入来确定)

    n = 6
    if n == 1 or n == 2:
        print(1)
    else:
        p1 = p2 = 1
        # 根据求第几位值来决定挪的次数
        for x in range(n - 3):
            # 每挪一次
            p1, p2 = p2, p1 + p2
    
        print(p1 + p2)
    
  1. 输出9*9口诀。 程序分析:分行与列考虑,共9行9列,i控制行,j控制列。

    for i in range(1,10):
        for j in range(1,i+1):
            print('{}*{}={}'.format(j,i,i*j),end=' ')
        print('')
    
  1. 这是经典的"百马百担"问题,有一百匹马,驮一百担货,大马驮3担,中马驮2担,两只小马驮1担,问有大,中,小马各几匹?(可以直接使用穷举法)

    for b in range(1, 100 // 3 + 1):
        for m in range(1, 100 // 2+1):
            s = 100 - b - m
            if b * 3 + m * 2 + s * 0.5 == 100:
                print('大马:', b, '中马', m, '小马', s)
    
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,376评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,126评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,966评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,432评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,519评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,792评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,933评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,701评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,143评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,488评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,626评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,292评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,896评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,742评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,977评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,324评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,494评论 2 348