Python每日一学 06——while循环

文章目录

  • Python每日一学 06——while循环
    • while循环
    • 实例一、斐波那契数列前n项
    • 实例二、Leibniz公式计算圆周率

while循环

循环结构表示程序重复执行某个或某些操作,直到某条件为假(或为真)时才可终止循环。
在问题求解过程中,很多时候需要重复做一件事情很多次。这时可以选择重复使用这些语句来解决问题,也可以使用循环控制结构来完成。

人类重复做某件事情次数越多,出错的概率越大,所以数学家们研究了各种等差数列、等比数列的求和公式、求积公式,把重复多次的工作变成一个表达式的求解,以降低出错的概率。
计算机与人不同,计算机可以快速精准的完成重复性的工作,而循环结构的使用,既可以减少代码行数、又可以简化业务逻辑,提高程序的可读性

Python中控制循环有两种结构:

1. while 循环
2. for...in 遍历循环

while循环语句一般用于循环次数不确定的情况下,通过判断是否满足某个指定的条件来决定是否进行下一次循环,也称为条件循环语句。

判断条件的返回值为布尔型,即TrueFalse,任何非0非空的值均为True。

当判断条件表达式的结果为True时,执行while下面缩进部分语句块中的全部语句,然后再次检查判断条件的值,重复以上操作,直到判断条件的结果为False时结束循环。

在循环体的语句中,一定有一条语句会使循环判断条件结果发生变化,使之在经过有限次运行后能够变“假”,从而结束循环。或在循环体中设定一个边界条件,当条件满足时,执行break语句直接终止当前循环。

while循环的语法如下:

while 判断条件:语句块(使判断条件表达式的值趋向于False)

实例一、斐波那契数列前n项

1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,……

斐波那契数列又称黄金分割数列,这个数列从第3项开始,后一项的值总是与他前面两项的和的值相等。

在数学上,以递推的方法定义:

F(1)=1
F(2)=1
F(n)=F(n - 1)+F(n - 2)    (n ≥ 3,n ∈ N*)

根据数学上的递推公式,可以先把变量名a,b指向开始两个值 1 和 1,然后构建一个循环。
在循环中输出 a 的值,然后计算 a + b 的和,将标签 a 指向对象 b,将标签 b 指向加和产生的新对象上作为新的一项,这个操作可以用同步赋值语句实现:

a, b = b, a + b

a, b = 1, 1             # 初始两项的值
while a < 1000:         # 设定终止条件,当a值大于或等于1000时终止循环print(a, end=',')   # 输出当前a 值,不换行,用逗号结束输出a, b = b, a + b     # 将 b 和 a + b 值分别赋值给变量名a和b
# 1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,

while循环还有一个重要的应用就是构造无限次循环,在循环体中使用if语句判定是否达到结束循环的条件,当满足条件时,用break语句终止循环。

此时需要注意,在程序执行过程中,务必要有使if 语句中的表达式结果趋于False的语句,以避免程序陷入无限循环

实例二、Leibniz公式计算圆周率

历史上有许多计算圆周率 p i pi pi的公式,其中,格雷戈里和莱布尼茨发现了下面的公式(可由等比数列求和公式变换并积分获得):

这个公式累加1项是4.00,累加2项是2.67,累加3项是3.47…趋进于圆周率值。编程对其各项进行累加,直到最后一项的绝对值小于 1 0 − 6 10^{-6} 10−6为止,输出此时的圆周率值。

公式中每一项的分母数字正好相差2,符号正负交替,可以利用循环结构求解。
因循环次数未知,但知道终止条件,所以可以用while加判断条件控制循环,条件为True时进入循环,在循环里使判断条件值发生改变,待判断条件值为False时,不再进入循环。

pi, i = 0, 1                # 设定pi初值0, i为分母变量名
sign = 1                    # sign用于改变符号
while 1 / i >= 1e-6:        # 条件表达式值为True时进入循环pi = pi + sign * 1 / i  # 累加,每次循环加上最后一项sign = - sign           # 每循环一次改变一次符号,实现正负项交替i = i + 2               # 下一项分母比当前项大2,此语句也会使1/i值变小
print(pi * 4)               # 乘4得以π的计算值,放循环外只输出一次
3.141590653589692

也可用while加True或一个结果为True的表达式,使循环判断条件永远为True,构建无限次循环。

在循环体中,判断循环控制条件1/i < 1 0 − 6 10^{-6} 10−6的结果为False时,用break结束循环,使循环可以在有限次数内结束。

此处break作用是程序执行到此语句时,提前结束循环

pi, i = 0, 1                    # 设定pi初值0, i为分母变量名
sign = 1                        # sign用于改变符号
while True:                     # 构建无限循环if 1 / i < 1e-6:            # 最末项大于等于10-6时break                   # 结束循环else:                       # 否则执行累加语句pi = pi + sign * 1 / i  # 累加,每次循环加上最后一项sign = - sign           # 每循环一次改变一次符号,实现正负项交替i = i + 2               # 下一项分母比当前项大2
print(pi * 4)                   # 乘4得以π的计算值,放循环外只输出一次
3.141590653589692

这个公式简单而优美,但收敛的较慢。增加计算的项数可以提高计算精度,将终止条件设为 1 0 − 9 10^{-9} 10−9时可以提高3位数的精度,再想提高精度,时间就难以接受了。

编写一个程序,可以重复接收用户输入的学生姓名,当输入的姓名为非空字符串时,输出“欢迎你,***同学!”(***处为用户输入的学生姓名),当用户直接输入回车时(此时input()函数接收到的是空字符串)结束程序。

user_name = input()
while user_name:  # 当输入非空时执行循环print(f'欢迎你,{user_name}同学!')  # 输出user_name = input()  # 循环体内的输入语句可重复接收输入
李明
欢迎你,李明同学!
杜甫
欢迎你,杜甫同学!
# 可用无限循环方法,用break结束程序
while True:user_name = input()if user_name != '':  # 当user_name为非空字符串时,即输入非空时print(f'欢迎你,{user_name}同学!')  # 输出else:break

if user_name != ‘’:

等价于:

if user_name:

后者表示当user_name为True时,因为user_name是input()结果,必然是字符串,所以仅当user_name为空字符串时,即直接输入回车时为False,其他情况均为True。

while True:user_name = input()if user_name:  # 当user_name为非空字符串时,即输入非空时print(f'欢迎你,{user_name}同学!')  # 输出else:break
# 可用赋值表达式更简洁的实现
while user_name := input():            # 当输入非空时执行循环print(f'欢迎你,{user_name}同学!')  # 输出

Python每日一学 06——while循环相关推荐

  1. Python每日一学 10——for循环

    Python每日一学 10--for循环 文章目录 Python每日一学 10--for循环 一.for循环介绍 二.实例一:等差数列前n项和 三.实例二:计算阶乘 四.实例三:拉马努金法计算圆周率 ...

  2. Python每日一学 08——get()方法学习

    Python每日一学 08--get()方法学习 文章目录 Python每日一学 08--get()方法学习 一.前言 二.题目 1.莫尔斯电码转换 2.凯撒密码加密 3.缩写月份单词 4.本月天数 ...

  3. Python每日一学 03——计算半径为r的圆的面积

    Python每日一学 03--计算半径为r的圆的面积 文章目录 Python每日一学 03--计算半径为r的圆的面积 一.计算半径为r的圆的面积 二.按IPO模式解决 三. 输入转数值 四.精度问题 ...

  4. Python每日一学 01——输入输出

    Python每日一学 01--输入输出 文章目录 Python每日一学 01--输入输出 一.前言 二.输出函数 三.输出格式 1.格式化字符串字面值 2.str.format() 方法 3.字符串拼 ...

  5. Python每日一学 05——布尔运算

    Python每日一学 05--布尔运算 文章目录 Python每日一学 05--布尔运算 一.布尔运算 二.实例:输出20000以内的所有回文素数 三.实例:判断输入的年份是否为闰年 四.实例: 登录 ...

  6. python每日一学_Python每日一练0011

    问题 你有一段通过下标访问列表或者元组中元素的代码,但是这样有时候会使得你的代码难以阅读, 于是你想通过名称来访问元素. 解决方案 使用collections.namedtuple 函数,例如我们经常 ...

  7. python实现素数筛选法_从零开始学Python系列-第6讲:循环结构

    应用场景 我们在写程序的时候,一定会遇到需要重复执行某条或某些指令的场景.例如用程序控制机器人踢足球,如果机器人持球而且还没有进入射门范围,那么我们就要一直发出让机器人向球门方向移动的指令.在这个场景 ...

  8. python爬虫进阶-每日一学(字体反爬-移花接木)

    目的 分析与学习更多的字体反爬套路 详细需求 url:http://glidedsky.com/level/web/crawler-font-puzzle-2 思路解析 一.审查 二.分析 impor ...

  9. python bar函数循环_一木.溪桥学Python-08: for循环、function函数

    一木.溪桥 在Logic Education跟Amy学Python 逻辑教育 :https://logicedu.ke.qq.com 12期:Python基础课 一木.溪桥学Python-08: fo ...

最新文章

  1. 用C#编写获取远程IP,MAC的方法
  2. python 学习 之 第二章(条件、循环和其他语句)
  3. 【转】NGUI研究院之三种方式监听NGUI的事件方法(七)
  4. Build RESTful client
  5. 百度地图3.1课程—检索演示
  6. 加密解密时遇到的不正确的数据以及要解密的数据长度无效问题解决方案
  7. pwn学习总结(三) —— 栈溢出经典题型整理
  8. tomcat web.xml配置
  9. jQuery 一些小技巧
  10. Unix操作系统目录存放内容
  11. mysql确认半同步命令_怎么判断mysql是否是半同步复制
  12. Fixed Function Shader
  13. web安全测试--基础篇
  14. 用Wineskin在Mac上运行exe文件
  15. 智能制造与MES系统的内在联系
  16. c语言自学基础知识视频,C语言 基础课堂视频教程
  17. 2022高等代数笔记整理
  18. 程序员们的薪酬待遇大起底,如何提高自己的收入?
  19. 英语单词听力测试软件,英语单词发音软件
  20. 花空流水去,过往皆云烟

热门文章

  1. 这款IDEA插件刷爆了朋友圈,网友:一定是女朋友送的~
  2. 红米点击android版,红米2移动4G版 安卓10 原生体验 LineageOS17.1 ROOT
  3. PC 游戏修改常用工具
  4. Matlab画常见的信号函数二
  5. 成功的云桌面解决方案应该是这样的
  6. 寻求一个兼职的安卓开发工程师
  7. select vba 网页 翻页_Excel 如何利用VBA实现快捷翻页功能?
  8. 未检测到K/3许可文件,并且该帐套已超过演示版期限
  9. 嵌入式裸机按键和CPU的中断系统学习笔记
  10. 5-FAM荧光染料 5-羧基荧光素图谱