Python每日一练 06

news2025/3/1 0:47:33

Python每日一练 06

文章目录

  • Python每日一练 06
    • 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} 106为止,输出此时的圆周率值。

公式中每一项的分母数字正好相差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} 106的结果为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} 109时可以提高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}同学!')  # 输出

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/38954.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[算法笔记]最长递增子序列和编辑距离

最长递增子序列 例如对于 a[] {2,1,5,3,6,4,8,9,7}其最长递增子序列为{1,3,4,8,9}所以长度&#xff08;或者说是结果&#xff09;为5。 对于a[0...n-1]&#xff0c;用dp[i]表示a[0...i]中以a[i]结尾的最长递增子序列长度 其状态状态方程&#xff1a; dp[i]1 // 0≤i≤…

【无人机通信优化】基于粒子群算法的多跳无线网络部署优化附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

[附源码]SSM计算机毕业设计时事资讯平台JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Date对象

文章目录Date日期对象Date对象的创建格式化日期3.获取Date总的毫秒数(时间戳)&#xff0c;是距离1970年1月1日过了多少毫秒数。二&#xff1a;常用时间获取方法三&#xff1a;日期设置方法四&#xff1a;时间转字符串菜鸟工具&#xff1a;https://www.runoob.com/jsref/jsref-o…

在Express框架使用ORM模型访问关系型数据库

一、ORM模型&#xff1a;设计思想&#xff0c;主要目的是简化计算机程序访问数据库 1、ORM&#xff1a;对象关系模型(对象关系映射) Object Releastion Model,将程序中的对象和数据库中关系(表格)进行映射。可以使开发者在程序中方便的对数据库进行操作(用户在程序操作对对象实…

【网页制作课作业】用HTML+CSS制作一个简单的学校网页(9页)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

一文熟悉 Go 的分支结构(if - else-if - else、switch)

哈喽大家好&#xff0c;我是陈明勇&#xff0c;今天分享的知识是 Go 的分支结构。如果本文对你有帮助&#xff0c;不妨点个赞&#xff0c;如果你是 Go 语言初学者&#xff0c;不妨点个关注&#xff0c;一起成长一起进步&#xff0c;如果本文有错误的地方&#xff0c;欢迎指出&a…

Python爬虫脚本+XML解析实现自动保存某商城的商品图

文章目录 1.背景介绍2.代码分析2.1.创建图片保存的目录2.2.定一下载函数2.3.发送请求解析数据2.源代码(全)1.背景介绍 Python脚本可以实现数据的爬取,而XML可以解析网页数据。将Python爬虫脚本与XML解析功能相结合,可以实现自动保存某商城的商品图功能。 注:本功能仅用于…

基于AlexNet卷积神经网络的手写体数字识别系统研究-附Matlab代码

⭕⭕ 目 录 ⭕⭕✳️ 一、引言✳️ 二、手写体数字识别系统✳️ 2.1 MNIST 数据集✳️ 2.2 CNN✳️ 2.3 网络训练✳️ 三、手写体数字识别结果✳️ 四、参考文献✳️ 五、Matlab代码获取✳️ 一、引言 手写数字识别是计算机视觉领域中的一个重要应用&#xff0c;已广泛应用在很…

电动汽车充电站的最优选址matlab程序

​摘要&#xff1a;以规划期内充电站的总成本 &#xff08;包括投资、运行和维护成本&#xff09;和网损费用之和最小为目标&#xff0c;考虑了相关的约束条件&#xff0c;构造了电动汽车充电站最优规划的数学模型&#xff0c; 关键词&#xff1a;电动汽车&#xff1b;充电站&a…

角色扮演?一款跨平台可移植开源游戏

程序员宝藏库&#xff1a;gitee.com/sharetech_lee/CS-Books-Store DevWeekly收集整理每周优质开发者内容&#xff0c;包括开源项目、资源工具、技术文章等方面。 每周五定期发布&#xff0c;同步更新到 知乎&#xff1a;Jackpop 。 欢迎大家投稿&#xff0c;提交issue&#…

支付系统设计概览

前言 就个人对支付的一些理解和经验&#xff0c;在此编辑出来和大家一起交流分享。请大佬多多指正。 在各种互联网场景中&#xff0c;牵扯到交易的情况&#xff0c;大多都需要支付系统的支持。支付系统往往不是一蹴而就的&#xff0c;往往都是随着业务的不断扩展&#xff0c;…

【python】面向对象程序设计(基础篇)

个人主页&#xff1a;天寒雨落的博客_CSDN博客-初学者入门C语言,python,数据库领域博主 &#x1f4ac; 热门专栏&#xff1a;python_天寒雨落的博客-CSDN博客 ​每日赠语&#xff1a;没有窘迫的失败&#xff0c;就不会有自豪的成功&#xff1b;失败不可怕&#xff0c;只要能从失…

浅识vue的虚拟DOM和渲染器

虚拟DOM本质上是对DOM的抽象描述&#xff0c;就是一个普通的js对象。他身上的属性要比真实DOM的属性要少得多。 在一定情况下&#xff0c;使用虚拟DOM的性能要逊于直接使用真实DOM。 例如&#xff0c;在页面一开始的时候&#xff0c;Vue需要先通过生成虚拟DOM树&#xff0c;在…

【雷达通信】雷达探测项目仿真附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

《恋上数据结构与算法》第1季:链表原理实现(图文并茂)

数据结构与算法的学习笔记目录&#xff1a;《恋上数据结构与算法》的学习笔记 目录索引链表原理实现一、链表二、链表的设计三、链表的接口设计四、链表接口的实现1. 索引越界的判断2. 根据索引查找指定节点3. 添加数据4. 插入元素5. 删除元素6. 清空元素7. 修改元素8. 查找元素…

傻白入门芯片设计,RDL/Interposer/EMIB/TSV(三)

目录 一、再分配层&#xff08;RDL&#xff09; 二、硅中介层&#xff08;Si Interposer&#xff09;&#xff1a;Active and Passive 三、嵌入式硅桥&#xff08;EMIB&#xff09; 四、硅通孔 TSV&#xff08;Through Silicon Vias&#xff09; 一、再分配层&#xff08;R…

CCF CSP认证2022年6月 归一化处理、寻宝!大冒险!、光线追踪

这是我第一次参加了这次CSP考试&#xff0c;300分&#xff0c;写了124三题&#xff0c;模拟题到现在都没看过题面没看&#xff0c;笑&#xff0c;t4写成模拟加数据结构&#xff0c;200行&#xff0c;因为一个小错误调了1h&#xff0c;错失了大好机会。考试环境的VSC配置的字体太…

[一篇读懂]C语言十讲:单链表的新建、查找

[一篇读懂]C语言十讲&#xff1a;单链表的新建、查找1. 与408关联解析及本节内容介绍1 与408关联解析2 本节内容介绍2. 头插法新建链表实战3. 尾插法新建链表实战4. 按位置查找及按值查找实战5. 往第i个位置插入元素实战6. 链表的调试方法总结234561. 与408关联解析及本节内容介…

面对无法投入模型训练的object类型数据在头疼,快来使用我的丝滑小连招

面对无法投入模型训练的object类型数据在头疼&#xff0c;快来使用我的丝滑小连招 前言 丝滑小连招 tip1- get_dummies完美one-hot&#xff08;str->int&#xff09; tip2 - rename_dims解决重名问题&#xff01; tip3 - insert且drop&#xff01;​​​​​​​ 前言 我…