XX学Python·while

while循环

  • while 循环的三个必要元素

    • while 关键字
    • 循环条件
    • 循环体
  • 构造循环要想的四件事

    • 初始状态
    • 循环条件
    • 要重复做的事情
    • 循环控制
  • 循环中的continue和break

    • continue:跳出本次循环,进入下一次循环(不会影响循环次数)

    • break:结束当前循环,后续循环次数不再执行

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

    • break 和continue 控制的是当前所在的循环结构

      # 吃苹果,第三个吃了半条虫子,不吃了,break
      i = 1
      while i <= 5:
          print(f"我吃了第{i}个苹果")
          if i == 3:
              print('吃了半条虫子,恶心')
              break
          i += 1
      # 吃苹果,第三有条虫子,扔了,吃第四个,continue
      i = 1
      while i <= 5:
          if i == 3:
              print('这个有虫子,不吃')
              i += 1
              continue # 在continue前要添加变量的自增
          print(f"我吃了{i}个苹果")
          i += 1
      # 写法二:可以先进行自增,再进行i的调用,这样就不用担心continue的问题了
      i = 0
      while i < 5:
          i += 1
          if i == 3:
              print('这个有虫子,不吃')
              continue
          print(f"我吃了{i}个苹果")
      

死循环

# 死循环:循环条件永远满足,可以持续循环的代码
# 死循环不是bug,可以利用。循环内部有很多方法可以跳出循环,如break
# 升级版猜拳游戏:一方达到3分就退出游戏。

# 普通循环版本
player_score = 0
computer_score = 0
while player_score < 3 and computer_score < 3:
    player = int(input("请输入您要出的拳型:(0石头,1剪刀,2布)"))
    import random
    computer = random.randint(0, 2)
    result = player - computer
    if result == -1 or result == 2:
        player_score += 1
        print('玩家获胜')
    elif result == 0:
        print('平局')
    else:
        computer_score += 1
        print('电脑获胜')
    print(f'玩家和电脑的比分为:{player_score}:{computer_score}')
# 死循环版本
player_score = 0
computer_score = 0
while True:
    player = int(input("请输入您要出的拳型:(0石头,1剪刀,2布)"))
    import random
    computer = random.randint(0, 2)
    result = player - computer
    if result == -1 or result == 2:
        player_score += 1
        print('玩家获胜')
    elif result == 0:
        print('平局')
    else:
        computer_score += 1
        print('电脑获胜')
    print(f'玩家和电脑的比分为:{player_score}:{computer_score}')
    if player_score >= 3:
        print('玩家最终获胜')
        break
    if computer_score >= 3:
        print("电脑最终获胜")
        break

循环嵌套

# 在循环嵌套中,外层循环执行一次,内层循环全部执行完成
# 需求:一组训练:跑步四圈,做深蹲10分钟。要做3组。
i = 1  # 做3组的初始状态
while i <= 3:  # 做3组训练后退出循环
    print(f'第{i}组训练开始')
    j = 1  # 跑圈初始状态
    while j <= 4:  # 跑4圈后退出循环
        print(f'跑了{j}圈')
        j += 1  # 内层循环自增变量
    print('做了10分钟深蹲')
    i += 1  # 外层循环自增变量

# 循环嵌套中,外层循环的break和continue会影响内层循环,但内层的不会影响外层
  • 练习

    # 打印一行*
    # i = 1
    # while i <= 5:
    #     print('*', end=' ')
    #     i += 1
    # 打印6行矩形
    j = 1
    while j <= 6:
        i = 1
        while i <= 5:
            print('*', end=' ')
            i += 1
        print()  #为了换行
        j += 1
    # 结论:外层循环控制的是行数, 内层循环控制的是列数
    
    # 需求:打印三角形
    """
    *
    * *
    * * *
    * * * *
    * * * * *
    """
    # 外层循环5行,i<=5
    # 内层循环:第一行1颗*,第二行2颗*,...,第i行i颗*。所以循环的i次,即j<=i.
    i = 1  
    while i <= 5:
        j = 1
        while j <= i:
            print('*', end=' ')
            j += 1
        print()
        i += 1
    
    # 打印倒立的直角三角
    i = 1
    while i <= 5:
        j = 1
        while j <= 6-i:
            print('*', end=' ')
            j += 1
        print()
        i += 1
    
    # 需求:打印九九乘法表
    """
    1*1=1
    1*2=2 2*2=4
    1*3=3 2*3=6 3*3=9
    """
    # 先打印一个9行9列的三角形,再把*的内容换成算式,
    # 九九乘法表中,公式规则:列 * 行 = 值
    i = 1
    while i <= 9:
        j = 1
        while j <= i:
            print(f'{j}*{i}={j*i}', end='\t')
            j += 1
        print()
        i += 1
    
    # 打印等腰三角形
    i = 1
    while i <= 5:   # 外层循环控制行数
        j = 1
        while j <= 5-i:
            print(' ', end='')  # 内层第一个循环控制空格的数量
            j += 1
        k = 1
        while k <= 2*i-1:
            print('*', end='')  #内层第二个循环控制*的数量
            k += 1
        print()
        i += 1
    
    # 过7游戏
    # 1-100,获取个位数字:i%10==7,十位数字:i//10==7
    i = 1
    while i <= 100:
        if i % 7 == 0 or i % 10 == 7 or i // 10 == 7:
            print('ha')
        else:
            print(i)
        i += 1
    # 1-1000,个位:i%10==7,十位:i%100//10==7(如175),百位i//100==7
    
posted @ 2022-10-04 22:41  PORTB  阅读(29)  评论(0编辑  收藏  举报