当前位置: 首页 > news >正文

python流程控制之while循环

python流程控制之while循环

文章目录

  • python流程控制之while循环
    • 引入
      • 1.什么是循环
      • 2.为何要用循环
      • 3.如何使用循环
        • while循环的基本使用
          • while循环的使用
    • 一.结束while循环的两种方式
      • 1.方式一 : 条件改为假
      • 2.方式二 : break 当场结束本次循环
    • 二.循环嵌套
      • 1.使用 break 一层一层结束循环
      • 2.使用该条件为假结束全部循环
    • **三. while 与 continue 的结合使用**
    • 四.while 与 else 的结合使用
    • 五.死循环
      • 1.纯输入的死循环 : input
      • 2.纯输出的死循环 : print
      • 3.纯计算的死循环 : 计算
      • 4.`continue`无限死循环
    • 六、练习

引入

1.什么是循环

  • 循环就是重复的做某事

2.为何要用循环

  • 为了让计算机像人一样去重复做某事
  • 所以程序中必须有相应的机制来控制计算机具备人的这种循环做事的能力

3.如何使用循环

python中有while与for两种循环机制,其中while循环称之为条件循环,语法如下

while循环语法

  • 伪代码展示
while 条件:
     代码1     
     代码2     
     代码3
while的运行步骤:
步骤1:如果条件为真,那么依次执行:代码1、代码2、代码3......
步骤2:执行完毕后再次判断条件,如果条件为True则再次执行:代码1、代码2、代码3......,如果条件为False,则循环终止

未命名文件(5)

  • 实际示例
# 循环打印三次"Hello word!"
count = 1
while count > 3:
    print("Hello word!")
    count +=1

while循环的基本使用

用户认证程序

  • 需求:用户认证程序的基本逻辑就是接收用户输入的用户名密码然后与程序中存放的用户名密码进行判断,判断成功则登陆成功,判断失败则输出账号或密码错误
username = "jason"
password = "123"

inp_name =  input("请输入用户名:")
inp_pwd =  input("请输入密码:")
if inp_name == username and inp_pwd == password:
    print("登陆成功")
else:
    print("输入的用户名或密码错误!")
#通常认证失败的情况下,会要求用户重新输入用户名和密码进行验证,如果我们想给用户三次试错机会,本质就是将上述代码重复运行三遍,你总不会想着把代码复制3次吧。。。。
username = "jason"
password = "123"

# 第一次验证
inp_name =  input("请输入用户名:")
inp_pwd =  input("请输入密码:")
if inp_name == username and inp_pwd == password:
    print("登陆成功")
else:
    print("输入的用户名或密码错误!")

# 第二次验证
inp_name =  input("请输入用户名:")
inp_pwd =  input("请输入密码:")
if inp_name == username and inp_pwd == password:
    print("登陆成功")
else:
    print("输入的用户名或密码错误!")

# 第三次验证
inp_name =  input("请输入用户名:")
inp_pwd =  input("请输入密码:")
if inp_name == username and inp_pwd == password:
    print("登陆成功")
else:
    print("输入的用户名或密码错误!")
while循环的使用

即使是小白的你,也觉得的太low了是不是,以后要修改功能还得修改3次,因此记住,写重复的代码是程序员最不耻的行为。

那么如何做到不用写重复代码又能让程序重复一段代码多次呢? 循环语句就派上用场啦(使用while循环实现)

username = "jason"
password = "123"
# 记录错误验证的次数
count = 0
while count < 3:
    inp_name = input("请输入用户名:")
    inp_pwd = input("请输入密码:")
    if inp_name == username and inp_pwd == password:
        print("登陆成功")
    else:
        print("输入的用户名或密码错误!")
        count += 1

使用了while循环后,代码确实精简多了,但问题是用户输入正确的用户名密码以后无法结束循环,那如何结束掉一个循环呢?

一.结束while循环的两种方式

1.方式一 : 条件改为假

tag = True
while tag:
    username = input('input your username>>:')
    password = input('input your password>>:')
    if username == "shawn" and password == 123:
        print('登录成功')
        tag = False    #条件改为假,之后的代码还会运行,下次循环判断时才生效
    else:
        print("登录失败")
    print("这行输出依然运行...")  #依然运行

2.方式二 : break 当场结束本次循环

  • while+break的使用
tag = True
while tag:
    username = input('input your username>>:')
    password = input('input your password>>:')
    if username == "shawn" and password == 123:
        print('登录成功')
        break    #之后的代码不会运行,直接退出循环
    else:
        print("登录失败")
    print("这行输出不会运行...")  #不会运行

二.循环嵌套

1.使用 break 一层一层结束循环

  • 伪代码示例
while 条件1:
    while 条件2:
        while 条件3:
            break  #结束条件3
        break  #结束条件2
    break  #结束条件1

while循环嵌套+break 实例:

如果while循环嵌套了很多层,要想退出每一层循环则需要在每一层循环都有一个break

username = "jason"
password = "123"
count = 0
while count < 3:  # 第一层循环
    inp_name = input("请输入用户名:")
    inp_pwd = input("请输入密码:")
    if inp_name == username and inp_pwd == password:
        print("登陆成功")
        while True:  # 第二层循环
            cmd = input('>>: ')
            if cmd == 'quit':
                break  # 用于结束本层循环,即第二层循环
            print('run <%s>' % cmd)
        break  # 用于结束本层循环,即第一层循环
    else:
        print("输入的用户名或密码错误!")
        count += 1

2.使用该条件为假结束全部循环

  • 伪代码示例
tag=True
while tag:
    while tag:
        while tag:
            tag=False  #所有的条件都改成了假,全部结束

while循环嵌套+tag的使用案例

针对嵌套多层的while循环,如果我们的目的很明确就是要在某一层直接退出所有层的循环,其实有一个窍门,就让所有while循环的条件都用同一个变量,该变量的初始值为True,一旦在某一层将该变量的值改成False,则所有层的循环都结束

username = "jason"
password = "123"
count = 0

tag = True
while tag: 
    inp_name = input("请输入用户名:")
    inp_pwd = input("请输入密码:")
    if inp_name == username and inp_pwd == password:
        print("登陆成功")
        while tag:  
            cmd = input('>>: ')
            if cmd == 'quit':
                tag = False  # tag变为False, 所有while循环的条件都变为False 
                break
            print('run <%s>' % cmd)
        break  # 用于结束本层循环,即第一层循环
    else:
        print("输入的用户名或密码错误!")
        count += 1

三. while 与 continue 的结合使用

  • continue : 终止本次循环,直接进入下一次
  • continue 之后一定不要写代码, 因为永远也无法运行
  • 代码示例
# 打印"1~6",等于"3"时不打印
count=0
while count < 6:
    if count == 3:
        count += 1
        continue  
        #结束本层进入下面的代码,同级别后面不要有代码
    print(count)
    count+=1

while+continue的使用案例

break代表结束本层循环,而continue则用于结束本次循环,直接进入下一次循环

# 打印1到10之间,除7以外的所有数字
number=11
while number>1:
    number -= 1
    if number==7:
        continue # 结束掉本次循环,即本次循环continue之后的代码都不会运行了,而是直接进入下一次循环
    print(number)

四.while 与 else 的结合使用

  • else : 当 while 循环正常结束后才会运行
  • 代码示例
?当通过"break"结束循环时,为不正常结束
count=0
while count < 6:
    if count == 3:
        break
    print(count)
    count+=1
else:  #else不会运行
    print("==========>")

?当循环正常结束,"else"运行
count=0
while count < 6:
    print(count)
    count+=1
else:  #else会运行
    print("==========>")

while+else的使用案例

在while循环的后面,我们可以跟else语句,当while 循环正常执行完并且中间没有被break 中止的话,就会执行else后面的语句,所以我们可以用else来验证,循环是否正常结束

count = 0
while count <= 5 :
    count += 1
    print("Loop",count)
else:
    print("循环正常执行完啦")
print("-----out of while loop ------")
输出
Loop 1
Loop 2
Loop 3
Loop 4
Loop 5
Loop 6
循环正常执行完啦   #没有被break打断,所以执行了该行代码
-----out of while loop ------

如果执行过程中被break,就不会执行else的语句

count = 0
while count <= 5 :
    count += 1
    if count == 3:
        break
    print("Loop",count)
else:
    print("循环正常执行完啦")
print("-----out of while loop ------")
输出
Loop 1
Loop 2
-----out of while loop ------ #由于循环被break打断了,所以不执行else后的输出语句

五.死循环

死循环本身是无害的, 纯计算的死循环才有害

1.纯输入的死循环 : input

  • 不引发效率问题
# 每次都在等待用户输入
while True:
    inp = input('>>:')
    print(inp)

2.纯输出的死循环 : print

  • 效率问题影响不大
# 循环输出
while True:
    print("======")

3.纯计算的死循环 : 计算

  • 引发致命效率问题
  • CPU资源全被占用
  • 其他应用程序将崩溃
# 无限计算
while True:
    1 + 1

4.continue无限死循环

  • 比纯计算的死循环破坏力还要大
while True:
    continue

六、练习

练习1:

寻找1到100之间数字7最大的倍数(结果是98)

number=100
while number>0:
    if number%7==0:
        print(number)
        break
    number-=1

练习2:

age=18
count=0
while count<3:
    count+=1
    guess = int(input(">>:"))
    if guess > age :
        print("猜的太大了,往小里试试...")
    elif guess < age :
        print("猜的太小了,往大里试试...")
    else:
        print("恭喜你,猜对了...")

相关文章:

  • Python语法入门之流程控制if判断
  • IDE集成开发环境的基本使用
  • Python实战演练:ATM + 购物车项目开发
  • 博客搬家通告!
  • python之深浅copy
  • python小数据池,代码块的深入剖析
  • 软件开发的目录规范
  • Linux前身今世
  • linux操作系统虚拟机安装
  • python之数字类型内置方法
  • python之字符串类型内置方法
  • python之列表类型内置方法
  • python之元组类型内置方法
  • python之字典类型内置方法
  • python集合类型内置方法
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • Redis 中的布隆过滤器
  • Vue组件定义
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 多线程 start 和 run 方法到底有什么区别?
  • 记录:CentOS7.2配置LNMP环境记录
  • 技术胖1-4季视频复习— (看视频笔记)
  • 将 Measurements 和 Units 应用到物理学
  • 区块链分支循环
  • 小程序button引导用户授权
  • 以太坊客户端Geth命令参数详解
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (C++17) optional的使用
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (七)c52学习之旅-中断
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (转)母版页和相对路径
  • .NET Micro Framework初体验(二)
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • @Autowired @Resource @Qualifier的区别
  • @RequestMapping用法详解
  • [ajaxupload] - 上传文件同时附件参数值
  • [Android]Android P(9) WIFI学习笔记 - 扫描 (1)
  • [Angular] 笔记 8:list/detail 页面以及@Input
  • [C++]C++基础知识概述
  • [corCTF 2022] CoRJail: From Null Byte Overflow To Docker Escape
  • [Delphi]一个功能完备的国密SM4类(TSM4)[20230329更新]
  • [GYCTF2020]Ez_Express
  • [ITIL学习笔记]之事件管理(2)
  • [Java安全入门]三.CC1链
  • [LeetCode]—Permutations II 求全排列(有重复值)
  • [loj#115] 无源汇有上下界可行流 网络流
  • [MySQL FAQ]系列 -- 账号密码包含反斜线时怎么办
  • [Paper]Application of deep convolutional neural network for automated detection of myocardial...
  • [SpringBoot]接口的多实现:选择性注入SpringBoot接口的实现类