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

02-5.python入门基础一控制流(while)

Python 控制流是指控制程序执行顺序的机制,它允许程序根据不同的条件和情况执行不同的代码块或重复执行某些代码。

while 循环的用法与示例

语法结构及要点

在 Python 中,while循环是一种基于条件判断的循环结构,其语法构成如下:

while 循环条件:

    循环体代码

这里的 “循环条件” 通常是一个布尔表达式,也就是其结果会被判定为真(True)或者假(False)的表达式,常见的如比较运算(像 >、<、==、>=、<=、!= 等)、逻辑运算(and、or、not 等)组成的表达式都可以充当循环条件。

而 “循环体代码” 就是在满足循环条件的情况下,会被重复执行的一段代码,它需要进行缩进,一般推荐使用四个空格来缩进,并且在同一个while循环的循环体中缩进量要保持一致,不然 Python 解释器可能会报错或者出现不符合预期的执行逻辑。

例如,我们想要实现一个简单的从 1 累加到某个数字的操作,可以这样写代码:

num = 1

sum_result = 0

while num <= 10:  # 循环条件为num小于等于10

    sum_result += num

    num += 1  # 改变num的值,否则可能陷入死循环

print(sum_result)

在上述代码中,首先初始化了变量num为 1 以及用于累加结果的变量sum_result为 0,然后通过while循环,只要num小于等于 10 这个条件成立,就会执行循环体中的代码,也就是不断把num累加到sum_result中,并且每次循环让num的值加 1,直到num大于 10 时循环结束,最终输出累加的结果。可以看到循环条件的设置至关重要,它决定了循环何时开始以及何时结束,而循环体代码则是我们期望重复执行的具体操作内容。

条件循环示例

下面来看一些具体的条件循环示例,帮助大家更好地理解while循环的运行逻辑。

假设我们要实现一个功能,统计一个正整数从自身开始,每次减 1,直到减到 1 为止的过程中所有数字的和。代码示例如下:

n = 10  # 这里假设初始的正整数为10,可自行更改这个值进行测试

total_sum = 0

while n > 0:

    total_sum += n

    n -= 1

print(f"从{n + 1}累加到1的总和是: {total_sum}")

在这段代码里,首先定义了变量n表示初始的正整数,total_sum用来记录累加的和。然后while循环的条件是n > 0,只要这个条件满足,就会执行循环体代码,在循环体中把当前的n累加到total_sum里,并且让n的值减 1,如此反复,直到n不大于 0 了,循环结束,最后输出累加的总和。

再比如,我们要输出一个列表中所有大于 5 的元素,代码可以这样写:

num_list = [3, 7, 1, 9, 4, 8]

index = 0

while index < len(num_list):

    if num_list[index] > 5:

        print(num_list[index])

    index += 1

这里先定义了一个包含若干数字的列表num_list,同时初始化了一个索引变量index为 0。通过while循环,以index小于列表长度作为循环条件,在循环体中先判断当前索引位置的列表元素是否大于 5,如果大于 5 就输出该元素,然后让index的值加 1,去检查下一个位置的元素,直到遍历完整个列表,循环结束。

无限循环及控制示例

在 Python 中,有一种特殊情况就是while True这样的写法,它代表着一个无限循环,因为条件True始终是成立的。不过在实际应用中,我们通常需要结合一些条件判断以及控制语句(比如if语句和break语句等)来合理地终止这个无限循环,避免程序陷入死循环无法停止。

例如,我们可以通过不断接收用户输入的成绩,然后判断成绩等级并输出相应提示,直到用户输入特定的结束标识(这里假设输入 -1 表示结束)来结束循环,代码如下:

while True:

    score = input("请输入成绩(输入 -1 结束程序):")

    score = float(score)  # 将输入的字符串转换为数值类型

    if score == -1:

        print("程序结束!")

        break

    elif score >= 90:

        print("优秀")

    elif score >= 80:

        print("良好")

    elif score >= 70:

        print("中等")

    elif score >= 60:

        print("及格")

    else:

        print("不及格")

在上述代码中,while True开启了一个无限循环,每次循环都会提示用户输入成绩,然后把输入的字符串转换为数值类型后进行条件判断。如果用户输入的是 -1,就会执行if语句中的break语句,从而终止整个while循环;如果输入的是其他成绩数值,就会进入相应的成绩等级判断elif语句块,输出对应的等级提示,接着又会回到循环开头继续等待下一次用户输入,如此反复,直到接收到结束标识退出循环。

再比如,模拟一个简单的猜数字游戏,让用户不断猜测一个预先设定好的数字(这里假设数字为 50),直到猜对为止,代码实现如下:

secret_number = 50

while True:

    guess = int(input("请猜一个数字:"))

    if guess == secret_number:

        print("恭喜你,猜对啦!")

        break

    elif guess > secret_number:

        print("猜大了哦,再猜猜看。")

    else:

        print("猜小了哦,再猜猜看。")

在这个例子里,同样是while True的无限循环结构,用户每次输入猜测的数字后,通过if-elif语句进行判断,如果猜对了就执行break语句结束循环,要是猜大了或者猜小了就会给出相应提示,然后继续循环让用户再次猜测,直到猜对数字为止。

模拟 do while 循环示例

在 Python 中并没有内置像其他一些编程语言(如 C、C++ 等)那样的do while循环结构,但我们可以通过一定的代码修改来模拟实现类似的效果,也就是保证循环体代码至少执行一次后,再根据条件判断是否继续循环。

以下是模拟do while循环的一般步骤及示例:

步骤一:初始化循环条件变量,并且设置一个初始值使得循环体能够至少执行一次,例如:

condition = True

步骤二:使用while循环,将刚才初始化的条件变量作为循环条件,在循环体中编写我们期望至少执行一次且后续根据条件判断是否重复执行的代码,示例如下:

while condition:

    print("这是循环体代码,至少会执行一次哦。")

    # 这里可以添加更多循环体的具体操作代码

步骤三:在循环体执行完一次后,添加代码来检查和更新循环条件变量的值,根据实际需求决定是否继续循环,比如:

while condition:

    print("这是循环体代码,至少会执行一次哦。")

    # 模拟一些操作后,根据情况更新条件变量

    user_input = input("你想继续循环吗?(输入y继续,其他任意字符结束)")

    if user_input.lower()!= "y":

        condition = False

完整的示例代码如下:

condition = True

while condition:

    print("正在执行循环体的操作...")

    user_choice = input("输入1继续循环,输入其他数字结束循环:")

    if user_choice!= "1":

        condition = False

在这个示例中,一开始condition为True,所以循环体代码会先执行一次,输出相应提示信息,然后提示用户输入内容来决定是否继续循环。如果用户输入的不是 “1”,就会把condition设置为False,下次循环判断条件时就不满足了,循环就会结束,以此实现了类似其他语言中do while循环 “先执行一次,再根据条件判断后续是否继续” 的功能特点。

http://www.lryc.cn/news/505802.html

相关文章:

  • Go语言开发入门与实战
  • HarmonyOS Next应用开发实战:ArkWeb组件使用介绍及使用举例
  • 【已解决】在Visual Studio里将应用与Microsoft Store关联时提示网络异常
  • springcloud-gateway获取应用响应信息乱码
  • [笔记]关于Qt的nativeEvent事件无法接收window消息的Bug
  • LeetCode 热题 100_K 个一组翻转链表(31_25_困难_C++)(四指针法)
  • Pytorch | 从零构建MobileNet对CIFAR10进行分类
  • CSS系列(18)-- 工程化实践详解
  • 日拱一卒(18)——leetcode学习记录:二叉树中的伪回文路径
  • hive—炸裂函数explode/posexplode
  • SpringBoot 新特性
  • 鸿蒙app封装 axios post请求失败问题
  • 消息队列 Kafka 架构组件及其特性
  • 网络攻击与防范
  • 文献研读|基于像素语义层面图像重建的AI生成图像检测
  • 【操作系统】为什么需要架构裁剪?
  • LSTM长短期记忆网络
  • 基于前端技术UniApp和后端技术Node.js的电影购票系统
  • 数据结构与算法:稀疏数组
  • Meta重磅发布Llama 3.3 70B:开源AI模型的新里程碑
  • VSCode中的Black Formatter没有生效的解决办法
  • 【潜意识Java】蓝桥杯算法有关的动态规划求解背包问题
  • Odoo:免费开源ERP的AI技术赋能出海企业电子商务应用介绍
  • 微信小程序苹果手机自带的数字键盘老是弹出收起,影响用户体验,100%解决
  • sql中case when若条件重复 执行的顺序
  • 压力测试Jmeter简介
  • cesium 与 threejs 对比
  • 探索QScreen的信号与槽:动态响应屏幕变化
  • vLLM项目加入PyTorch生态系统,引领LLM推理新纪元
  • 索引-介绍结构语法