Python的零基础超详细讲解(第八天)-Python的条件判断

news2023/10/1 10:42:54

我们在使用无线耳机听音乐的时候,我们可以设置轻点两下耳机就播放下一首。如果我只设置轻点两下耳机,就播放下一首,那么,由于缺少正在使用耳机(耳机塞进耳朵视为正在使用)的前提条件,无论你是否正在使用,只要轻点两下,就会播放下一首。

所以,我们的设置应该是这样:轻点两下,如果耳机正在使用中,就播放下一首。

而这个设置中的如果...就...逻辑,就是与计算机沟通的逻辑---条件判断,其作用就是明确的让计算机知道:在什么条件下,该去做什么。

对于Python也是一样的,Python之所以可以完成自动化任务,比如Python爬虫项目中可以成功获取我们指定的数据信息,就是因为它可以执行条件判断。

接下来,我们通过中国新四大发明之一的“扫码支付”来感受一下逻辑判断的趣味性。

二维码支付听起来似乎是一项十分新鲜的技术,其实,这个跟手机报差不多,算不上新颖的技术。早在上世纪90年代,二维码支付技术就已经形成,只不过在国内是近几年刚刚兴起的。

2014年春节微信红包上线,为扫码支付奠定了用户基础。


import random
print("请输入红包金额,最多两位小数")

money=round(float(input()),2)
print("请输入红包数量")
number=int(input())
print("请输入红包方式:1.拼手气红包 2.普通红包 3.专属红包")
mode=int(input())
money=int(money*100)
if mode == 1:
    for i in range(1, number):
        a = random.randint(1, money-(number-i))  # 随机生成红包金额
        money = money-a
        print("第" + str(i) + "个人,收到" + str(a/100) + "元,")
    print("第" + str(number) + "个人,收到" + str(money/100) + "元,")
elif mode == 2:
    for i in range(1, number+1):  # 限制人数
        print("第" + str(i) + "个人,收到" + str(round((money/100)/number,2)) + "元")
else:
    print("指定人获取"+str(money/100)+"元")
复制代码

你看到没?这就是条件判断如果…就…逻辑产生的魔法。那么,这个条件判断的代码,要怎么码呢?

条件判断

在Python宇宙,条件判断语句总共有三种表现形式,我们先从最简单的单向判断:if开始说起:

单向判断:if

单向判断:if代表什么呢?我们知道在发红包的时候,如果专属红包超过200元,就会提示单个红包金额不可超过200元。

你会发现,上面的示例中,有一个如果...就。那么,我们用代码翻译这段话,就可以用if来表述,下面,请你来运行一下下方代码。

# 为单个红包面额
money = 201

# 条件:如果专属模式单个红包超过200元

if money > 200:

    # 结果:显示‘单个红包金额不可超过200元’的结果

    print('单个红包金额不可超过200元')
复制代码

那么,这段代码是如何实现的呢?

首先,第一行代码,用赋值运算符=对当前情况进行赋值:将红包面额201赋值给变量---红包面额

第二步,确定if条件:如果变量money的值>200时,就执行冒号后,下一行的命令。

第三步,用print()命令打印出结果:单个红包金额不可超过200元。所以,if语句的单向判断逻辑,我们可以这样归纳:

在这里,你可能注意到了一个细节:在条件判断代码中的冒号 : 后、下一行内容的前面,会空几个格,但这是为什么呢?

首先,在计算机的沟通语言中,空格的学名叫缩进,比如我们写文章都要空两个格,这就叫首行缩进。 对于Python而言,冒号和缩进是一种语法。它会帮助Python区分代码之间的层次,理解条件执行的逻辑及先后顺序。【注:缩进是四个空格或一个Tab键】

并且,在if条件语言中,缩进不需要我们手动按空格键。当你用英文输入法打:后按回车,我们的开发工具(用来编写Python代码的程序)为了方便大家编程,会自动实现下一行代码,向右缩进的功能。

此时,被缩进的内容(print()函数)和if条件语句组成了一个代码块(一个整体),成为了if条件下的内部命令。

这意味着:如果赋值满足if条件,计算机就会准确执行if条件内部的命令(即缩进的代码块)。

那么下面,请你运行下面这个代码,看看运行结果是什么。

# 为单个红包面额
money = 201

# 条件:如果专属模式单个红包超过200元

if money > 200:

    # 结果:显示‘单个红包金额不可超过200元’的结果

print('单个红包金额不可超过200元')
复制代码

执行上述代码,控制台提示错误:IndentationError: expected an indented block

翻译一下就是缩进错误:期望一个缩进块

这是因为,当我们去掉缩进时,if条件和print命令成为了两个不同的代码组,属于平行关系。你看:if条件下面,缺少了可以执行的动作。我们想一下:无论条件成不成立,都不会执行什么操作,这个条件的存在没有任何意义。

双向判断,if...else...

在Python世界,我们可以利用if的双向判断形式:if…else…去实现这个动作:当剩余钱包的数量小于1时,需要给抢红包的人送上祝福,来晚了,但还是要祝您万事如意!!!

下面,请你直接运行下面的代码,看程序是如何识别的:

# 剩余红包数量

redpacketnumber=0

# 条件:如果剩余红包数量大于等于1

if redpacketnumber >=1:

    # 结果:显示‘成功抢到了红包’的结果

    print('成功抢到了红包')

else:

    # 结果:显示'来晚了,但还是要祝您万事如意!!!'的结果

    print('来晚了,但还是要祝您万事如意!!!')
复制代码

其实生活中也是一样,很多事情都不是非此即彼的,当不满足条件的时候,我们要怎么办。

Python则很贴心地,让我们借用if...else语句,让码农有了另一种选择---[如果...就,否则...就]

在if...else条件语句中,if和else各自抱团,形成两个不同的代码块。表示的是条件和其他条件的互斥关系——如果不满足if条件,就执行else其他条件。

如果用我们上面抢红包的例子讲解的话,if定义的就是剩余红包数量>=1,而else定义的则是剩余红包数量<1。

而由于赋值【redpacketnumber =0】,并不满足【if redpacketnumber >=1:】这个条件,所以不能执行【print('成功抢到了红包')】的命令。

只能走第二条else:的路——执行print('来晚了,还是祝您万事如意!!!')的结果。

下面,我们来做个题巩固一下if...else...的知识点:抢完了红包,我们可以去吃饭了,可是吃什么还是得根据抢红包的多少来决定,如果我们抢的红包大于50元,我们就可以来一吨肉的,如果不超过50元,我们就只能吃素的了。

# 要先为抢到红包的金额赋值,假设抢到了38元

money=38
# 如果红包超过50的条件下,就...(条件后需加冒号)

if money>50:

    # 就打印结果:大口吃肉,大口喝酒

    print('大口吃肉,大口喝酒')

# 如果红包没有超过50,就...(else条件前无缩进,条件后需加冒号)

else:

    # 就打印:素食主义,养生才是硬道理

    print('素食注意,养生才是硬道理')
复制代码

关于if...else...的相关知识点到这里就讲完了,我们来总结一下if…else…语句的知识点。

上面的吃饭的练习中,我们会发现,事情并不是只有两面,可能会有第三面,其实38元我们也可以搭配一点肉菜了,荤素搭配,更营养,更健康。

那么,场景中有三个如果使用Python要如何实现呢?

多向判断:if…elif…else…

上述场景中,在判断3个或3个以上的条件时,我们就需要借助Python中的多向判断命令:if…elif…else…。

这三者共同构成了多向判断的命令逻辑关系:如果if的条件不满足,就按顺序看是否满足elif的条件,如果不满足elif的条件,就执行else的命令。

并且,当判断的条件超过3个时,中间的多个条件都可以使用elif。

那么,这个代码要怎么写呢?我们还是在代码中来感受一下elif的逻辑

# 要先为抢到红包的金额赋值,假设抢到了38元

money=38

# 如果红包超过50的条件下,就...(条件后需加冒号)

if money > 50:

    # 就打印结果:大口吃肉,大口喝酒

    print('大口吃肉,大口喝酒')

# 如果红包超过35,没超过50

elif 50 >= money > 35:

    print('荤素搭配,更营养,更健康')

# 如果红包没有超过50,就...(else条件前无缩进,条件后需加冒号)

else:

    # 就打印:素食主义,养生才是硬道理

    print('素食注意,养生才是硬道理')
复制代码

通过上面if和else的积累,多向判断elif的逻辑是不是很好理解呢?

首先,第一行的赋值,会按照从上到下的顺序挨个试一遍,看自己满足哪个条件,满足了就不往下走,不满足就继续试,试出结果为止。

其次,elif的运行本质上和else一样,已经带有其他条件的意思,所以elif后可以不接else。

比如上面的代码,money=38会对下面的if elif else条件逐个扫描,看看自己满足哪一个,就执行哪个条件底下的命令。

很显然,第二个条件elif 50 >= money > 35刚好能与money=5的前提相匹配,于是,执行elif底下的命令: print('荤素搭配,更营养,更健康')

下面,我们来总结一下elif的知识点:

if嵌套

最后,终于来到了扫码支付阶段,其实扫码支付的发展并不是一帆风顺的,2014年,疯抢微信红包,扫红码下载应用送红包,为扫码支付奠定用户基础,紧接着央行就叫停了二维码支付,原因是信息安全和资金安全,2016年支付宝推出扫红码送红包,二维码支付地位重获承认,市场井喷,此后,扫码支付前景一片光明。

由此可以看出,扫码支付中我们最关心的还是安全问题,为此,微信和支付宝也提供了各种保护措施,常见的就有单笔限额,频繁付款限制,额度限制等,用来更好的保障消费者的支付安全。

在具体的支付场景中,最常见的就是大额验证保护机制,如下支付场景

支付限额规则

1.如果支付金额大于500

  1).如果支付密码正确,支付成功

  2).否则,支付失败

2.如果支付金额不超过500

  1).如果开启了小额免密验证,支付成功

  2).如果没有开启小额免密验证

     1).如果支付密码正确,支付成功

     2).如果支付密码错误,支付失败
复制代码

像这种如果底下还有如果(即条件里还套条件)的情况,我们如何用Python把上面的规则写出来,并得出评价呢?

答案就是——嵌套条件。

if嵌套的应用场景,简单来讲就是:在基础条件满足的情况下,再在基础条件底下增加额外的条件判断。

就像上面的基础条件是500元,500元以上必须输入密码且密码正确才会支付成功,500元以下检测是否开启小额支付,如果开启了,不需要输入密码就直接支付成功,如果没开启,需要输入支付密码且密码正确才会支付成功。

因此,支付的场景用代码表示,应该用if嵌套来完成代码:

# 正确密码为123456
# 密码赋值为123456
password='123456'

# 支付金额赋值为265

paymoney=265
# 免密支付默认开启

check=false

# 条件:如果支付金额大于500
if paymoney > 500:
    # 条件:如果输入密码为123456
    if password=='123456':
        print('大金额支付成功')
    # 条件:密码不是123456
    else:
        print('密码错误,大金额支付失败')

# 条件:支付金额小于500
else:
    # 条件:如果开启了免密支付
    if check:
        print('小金额免密支付成功')
    # 条件:如果没有开启免密支付
    else:
        # 条件:如果密码正确
        if password == '123456':
            print('小金额支付成功')
        # 条件:如果密码错误
        else:
            print('密码错误,小金额支付失败')
复制代码

结果是小金额支付成功,你能看出程序的执行流程吗?下面我们一块来分析以下

if嵌套的执行循序

首先,我们先从整体总览一下,这段支付验证规则的代码,总共分为四部分【赋值ifelseprint() 】,两个大代码组。

并且,在代码组1的if条件和代码组2的else的条件下,又包含了条件判断命令if...else...,在代码组2的的else条件下又包含了if...else.

那么,这种嵌套命令我们要如何理解呢?

缩进相同的命令处于同一个等级,第一步,计算机就要按顺序一条一条地执行命令。

那么计算机的执行顺序是:

如何写嵌套代码

if嵌套由于涉及多个条件判断,并且是条件套条件的判断,为了逻辑清楚,我们可采用“由外而内,分而治之”的方法写if嵌套。

有一堆快递,要分别运往北京,上海,广州的某个小区。那么我们该如何对快递按地址进行分类呢?

第一步,我们对快递按北上广进行分类。

模拟代码是这样滴。

address='北京'
if address=='北京':
    print('北京中心')
elif address=='上海':
    print('上海中心')
elif address=='广州':
    print('广州中心')
else:
    print('地址无效')
复制代码

第二步,我们对到达北京中心的快递按区进行分类。

模拟代码是这样的。

if address=='北京':
    if district=='昌平区':
        print('昌平区中心')
    elif district=='顺义区':
        print('顺义区中心')
    elif district=='通州区':
        print('通州区中心')
    else:
        print('其他区')
复制代码

这时候我们会发现,我们只需要对到达北京的快递进一步捡练就可以。其实这是一种编程思想,就是分而治之的思想,将复杂的问题分为若干个小问题进行处理,问题就会变得非常简单。

第三步,假设快递到了昌平区,我们就可以进一步按街道进行捡练,最后按小区进行分发就可以。

嵌套是不是好玩又实用,不过还是要提醒一下,一定不要忘了缩进哦。

最后的最后,我们来总结一下知识点:

 

你们的支持是我最大的动力!!记得三连哦~mua 欢迎大家阅读往期的文章哦~

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

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

相关文章

【java 性能优化实战】2 深入剖析:哪些资源,容易成为瓶颈

在第 1 课时&#xff0c;我们简单介绍了解决性能问题常用的一些切入点。本课时我将从计算机资源层面向你讲解&#xff0c;哪些系统组件容易出现性能瓶颈&#xff1f;以及如何判断该系统组件是否达到了瓶颈&#xff1f; 计算机各个组件之间的速度往往很不均衡&#xff0c;比如 …

Python的零基础超详细讲解(第十天)-Python的input()函数

input()函数 在今天的课程里&#xff0c;我们将继续了解中国的“新四大发明”——共享经济&#xff0c;在分享的快乐中&#xff0c;开启与计算机实现“双向沟通”的新篇章。 下面&#xff0c;我们一起来体验一下共享服务吧。请点击下方代码块左方的【运行】按钮&#xff0c;在…

【java 性能优化实战】3 工具实践:如何获取代码性能数据?

首先解答一下上一课时的问题。磁盘的速度这么慢&#xff0c;为什么 Kafka 操作磁盘&#xff0c;吞吐量还能那么高&#xff1f; 这是因为&#xff0c;磁盘之所以慢&#xff0c;主要就是慢在寻道的操作上面。Kafka 官方测试表明&#xff0c;这个寻道时间长达 10ms。磁盘的顺序写…

Python图像处理,cv2模块,OpenCV实现目标跟踪

前言 利用Python实现OpenCV目标跟踪。废话不多说。 让我们愉快地开始吧~ 开发工具 Python版本&#xff1a; 3.6.4 相关模块&#xff1a; cv2模块&#xff1b; 以及一些Python自带的模块。 环境搭建 安装Python并添加到环境变量&#xff0c;pip安装需要的相关模块即可。…

【java 性能优化实战】4 工具实践:基准测试 JMH,精确测量方法性能

上一课时&#xff0c;我们了解到一些外部工具可以获取系统的性能数据。 但有时候&#xff0c;我们想要测量某段具体代码的性能情况&#xff0c;这时经常会写一些统计执行时间的代码&#xff0c;这些代码穿插在我们的逻辑中&#xff0c;进行一些简单的计时运算。比如下面这几行…

用Python几行代码实现简单的人脸识别,10分钟完成(附源码)

前言 今天&#xff0c;我们用Python实现简单的人脸识别技术&#xff01; Python里&#xff0c;简单的人脸识别有很多种方法可以实现&#xff0c;依赖于python胶水语言的特性&#xff0c;我们通过调用包可以快速准确的达成这一目的。这里介绍的是准确性比较高的一种。 一、首…

java编程石头剪刀布图片_石头、剪刀、布!10分钟带你打开深度学习大门,代码已开源...

原标题&#xff1a;石头、剪刀、布&#xff01;10分钟带你打开深度学习大门&#xff0c;代码已开源沉沉 发自 宇宙中心量子位 出品 | 公众号 QbitAI深度学习技术的不断普及&#xff0c;越来越多的语言可以用来进行深度学习项目的开发&#xff0c;即使是Java这样曾经只是在浏览器…

用python+pillow模块实现抖音晃眼睛的特效,图像处理之路(附源码)

前言 利用Python实现抖音晃眼睛的特效&#xff0c;让我们愉快地开始吧~ 开发工具 Python版本&#xff1a; 3.6.4 相关模块&#xff1a; pillow模块&#xff1b; numpy模块&#xff1b; argparse模块&#xff1b; 以及一些Python自带的模块。 环境搭建 安装Python并添…

面试高频题:Hash一致性算法是如何解决数据倾斜问题的?

一致性Hash是一种特殊的Hash算法&#xff0c;由于其均衡性、持久性的映射特点&#xff0c;被广泛的应用于负载均衡领域&#xff0c;如nginx和memcached都采用了一致性Hash来作为集群负载均衡的方案。 本文将介绍一致性Hash的基本思路&#xff0c;并讨论其在分布式缓存集群负载…

java 鸡兔统统_Java内存泄露介绍

Java的最显着的优点之一是其内存管理。您只需创建对象&#xff0c;并且Java Garbage Collector负责分配和释放内存。但是&#xff0c;情况并不那么简单&#xff0c;因为Java应用程序中经常发生内存泄漏。本教程将说明什么是内存泄漏&#xff0c;为什么会这样发生&#xff0c;以…

还在加班做数据吗?今天1分钟教你学会用Python轻松玩转Excel

前言 当你需要每天对 Excel 做大量重复的操作&#xff0c;如果只靠人工来做既浪费时间&#xff0c;又十分枯燥&#xff0c;好在 Python 为我们提供了许多操作 Excel 的模块&#xff0c;能够让我们从繁琐的工作中腾出双手。 今天就和大家分享一个快速处理 Excel 的模块 openpy…

[Java工程师面试精选]Redis cluster集群模式的原理

redis cluster redis cluster是Redis的分布式解决方案&#xff0c;在3.0版本推出后有效地解决了redis分布式方面的需求 自动将数据进行分片&#xff0c;每个master上放一部分数据 提供内置的高可用支持&#xff0c;部分master不可用时&#xff0c;还是可以继续工作的 支撑N…

Spring 面试多频 18问

1.spring 中都用到了哪些设计模式? 「1.工厂设计模式」: 比如通过 BeanFactory 和 ApplicationContext 来生产 Bean 对象「2.代理设计模式」: AOP 的实现方式就是通过代理来实现&#xff0c;Spring主要是使用 JDK 动态代理和 CGLIB 代理「3.单例设计模式」: Spring 中的 Bean …

Python的零基础超详细讲解(第二天)-Python的基础语法1

Python 基础语法 打开python的编辑器 这里注意的是&#xff0c;之前下载的python在电脑主页上没有快捷方式&#xff0c;需要在win开始界面中打开 最终打开效果是一个白色的跟终端类似的编辑器&#xff0c;我们输入的时候是在三个箭头后边输入。 在 python 提示符中输入以下文…

为什么建议少用 if 语句

相信大家或多或少的听说过&#xff0c;少用点if-else吧&#xff1f;但是为什么要少用呢&#xff0c;有人说他会影响程序运行效率&#xff0c;但是这并不是他最大的罪状… if-else 的罪状 if-else 作为三种最基本的程序结构之一&#xff0c;是我们从最开始学习编程时就接触的基…

Python的零基础超详细讲解(第三天)-Python的基础语法

多行语句 Python 通常是一行写完一条语句&#xff0c;但如果语句很长&#xff0c;我们可以使用反斜杠 \ 来实现多行语句&#xff0c;例如&#xff1a; duohang item_one \item_two \item_three 复制代码 在 [], {}, 或 () 中的多行语句&#xff0c;不需要使用反斜杠 \&am…

Java并发的类库_Java 并发类库AbstractQueuedSynchronizer 分析

java.util.concurrent.locks.AbstractQueuedSynchronizer.compareAndSetState(int, int)子类推荐被定义为自定义同步装置的内部类&#xff0c;同步器自身没有实现任何同步接口&#xff0c;它仅仅是定义了若干acquire之类的方法来供使用。该同步器即可以作为排他模式也可以作为共…

聊聊索引失效的10种场景,太坑了

今天我接着上一期数据库的话题&#xff0c;更进一步聊聊索引的相关问题&#xff0c;因为索引是大家都比较关心的公共话题&#xff0c;确实有很多坑。 不知道你在实际工作中&#xff0c;有没有遇到过下面的这两种情况&#xff1a; 明明在某个字段上加了索引&#xff0c;但实际…

太酷炫了,我用 Python 画出了北上广深的地铁路线动态图

今天教大家用python制作北上广深——地铁线路动态图&#xff0c;这可能是全网最全最详细的教程了。 坐标点的采集 小五之前做过类似的地理可视化&#xff0c;不过都是使用网络上收集到的json数据。但很多数据其实是过时的&#xff0c;甚至是错误/不全的。所以我们最好还是要自…

java分布式锁解决方案 redisson or ZooKeeper

redis 分布式锁 Redisson 是 redis 官方推荐的Java分布式锁第三方框架。 高效分布式锁 当我们在设计分布式锁的时候&#xff0c;我们应该考虑分布式锁至少要满足的一些条件&#xff0c;同时考虑如何高效的设计分布式锁&#xff0c;这里我认为以下几点是必须要考虑的。 1、互…