热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

《Python编程从入门到实践》学习笔记5:IF语句

if语句作为条检测用的判断语句,在很多编程语言中经常使用,python也不例外。if语句的核心是True和False的表达式,也即是条件测试。当条件的结果为True时,程序会自动执

  if语句作为条检测用的判断语句,在很多编程语言中经常使用,python也不例外。if语句的核心是True和False的表达式,也即是条件测试。当条件的结果为True时,程序会自动执行IF后面的语句;当条件为False时,则执行else或elif后面的语句,如果没有则忽略。

  大多数情况下,条件测试都是将一个变量的值拿来同另一个变量进行对比,从而判断需要执行的代码,如下例所示:

if 1 ==2:
    print("yes")
else:
    print("no")

  这是最简单的if语句应用,逻辑其实很简单,如果1=2,就返回yes,否则就返回no,程序跑出来的结果自然是no。这就是if语句最直接的运用方式,判断!

  当然,日常的开发过程中,对于if语句的运用自然不可能这么简单,正如同书中所举的关于买票的例子,如下所示:

age = 12

if age <18:
    price = 5
else :
    price = 10

print("You admission cost is $" + str(price) + ".")

  首先设定一个变量age,给他赋值12。然后开始进入程序,当age小于18岁时,票价为5美刀;当age大于18岁时,票价为10美刀,结果如下所示:

You admission cost is $5.

  但是在日常生活中,我们知道,景区的票价往往不止有成人票和未成年票,还有儿童票。但是"if……else……"的判断只有两个结果,如果再添加一个或者更多的话,有必要再写一段"if……else……"循环么?当然没必要!这时候,可以使用"if……elif……else……"循环来解决这个问题,如下所示:

age = 12

if age <4:
    price = 0
elif age <18:
    price = 5
else :
    price = 10

print("You admission cost is $" + str(price) + ".")

  同样的例子,在elif的作用,程序多了一个选择!还是设定变量age为12岁,当age小于四岁的时候免票,当age小于18岁的时候,收取5美刀票价;当age是其他数字的时候,收取10美刀票价!这样的例子对于一个有编程经验的人来说,很容易就能理解!但是对于完全没接触过编程的人来说,有一个很重要的概念!那就是程序是如何判断"age <4"之后的逻辑的。

  事实上有这样的想法并不奇怪,简单来说,当程序开始执行“age <4”判断的时候,就已经将符合条件的数据进行了处理,而执行“age <18”判断的时候,则是不满足"age <4"的数据。正如同开篇所说if语句的概念一样,程序每执行一步,都会讲满足该步骤条件的数据进行处理,将不满足该步骤条件的数据交给下一步骤,直到数据处理完成,或再也无法处理,导致判断结束为止。因此当小程序开始判断"age <18"的时候,满足"age <4"的部分数据已经处理完毕,在存储空间内被剔除了。同样在执行“else”步骤的时候,满足"age <4"和"age <18"的数据也已经被处理完毕后剔除出去了,所以“else”执行的只是前两个步骤执行完后,因为没处理掉而剩下的这部分数据。因此从整体上来看,整个if语句就是在执行这样的线性处理流程!

  上面这段代码执行结束后的答案,仍然跟之前的票价问题代码的答案相同。那么如果票价再细分,出现四个不同的分支,比如增加老年票价,应该怎么办呢?答案很简单,再加一个“elif”就行了!如下所示:

age = 66

if age <4:
    price = 0
elif age <18:
    price = 5
elif age <60:
    price = 10
else :
    price = 8

print("You admission cost is $" + str(price) + ".")

  此时程序中有新增了一个"elif"分支,当age大于60岁时,票价为8美刀。我们将age赋值为66岁,执行程序可以看到如下结果:

You admission cost is $8.

  从上例中可以看出,当判断分支变多了以后,可以通过增加“elif”分支的方法,增加判断的选项,以此来满足需求。对于"elif"的数量,Python中并没有限制,因此多个"elif"是可以的。

  对于多分支的判断问题,可以用"elif"来解决,那么对于多参与的判断问题呢?如果引入列表参与的if语句,又是什么样的情况的?

  假设现在通过团购进行买票,多人同时购买,如上例一样,通过对单一年龄的判断来决定票价的方法,并不适用于人数众多的情况。此时可以通过引入列表的方式来进行解决,如下所示:

ages = [3,11,25,7,22,15,65,18,17]

for age in ages:
    if age <= 4:
        price = 0
        print("You admission cost is $" + str(price) + ".")
    elif age <18:
        price = 5
        print("You admission cost is $" + str(price) + ".")
    elif (age >= 18) and (age <60):
        price = 10
        print("You admission cost is $" + str(price) + ".")
    else :
        price = 8
        print("You admission cost is $" + str(price) + ".")

  上例可以看出,当一个旅行团集体参加旅游的情况下,我们创建了一个列表ages,将团员们的年龄输入进去,分别为[3,11,25,7,22,15,65,18,17]。前文关于列表的操作中曾说道通过for循环来遍历列表的方法,因此创建变量age来循环遍历列表ages。age将ages中的值分别取出,在if语句中进行判断,运行结果如下:

 

You admission cost is $0.
You admission cost is $5.
You admission cost is $10.
You admission cost is $5.
You admission cost is $10.
You admission cost is $5.
You admission cost is $8.
You admission cost is $10.
You admission cost is $5.

 

  对于列表的循环判断问题,还有一种列表对应列表的情况!如书中披萨制作的案例:当顾客点的披萨食材和饭店有的披萨食材不同的现象!如下例所示:

available_toppings = [\'mushrooms\',\'olives\',\'green peppers\',\'pepperoni\',\'pineapple\',\'extra cheese\']

requested_toppings = [\'mushrooms\',\'french fries\',\'extra cheese\']

for requested_topping in requested_toppings:
    if requested_topping in available_toppings:
        print("Adding " + requested_topping + ".")
    else:
        print("Sorry,we don`t have " + requested_topping + ".")

print("\nFinished making your pizza!")

  此时可以看到,available_toppings包含的食材为[\'mushrooms\',\'olives\',\'green peppers\',\'pepperoni\',\'pineapple\',\'extra cheese\'],而顾客点的食材为[\'mushrooms\',\'french fries\',\'extra cheese\'],其中\'french fries\'是饭店食材中没有的!因此首先打开for循环,定义变量requested_topping用来循环顾客所需的食材清单requested_toppings,然后在下面将循环的每一项结果,都与饭店菜单available_toppings中的食材进行比较,满足条件的情况下,执行if后面的语句,输出print("Adding " + requested_topping + "."),不满足条件的情况下执行else后面的语句,输出print("Sorry,we don`t have " + requested_topping + "."),最后输出print("\nFinished making your pizza!"),执行结果如下所示:

Adding mushrooms.
Sorry,we don`t have french fries.
Adding extra cheese.

Finished making your pizza!

   对于列表循环的if判断,有一个很常用的概念需要知道,就是空列表的判断问题!如下所示:

a = []

if a :
    print(\'y\')
else:
    print(\'n\')

  如上例所述,定义一个空列表a,当列表不为空的时候,返回“y“,否则返回”n“,运行结果如下所示:

D:\Python\python.exe E:/python/test1/venv/test1.py
n

进程完成,退出码 0

  此时可以看到程序的运行结果为“n”,也即是说判断列表为空的时候,可以直接在if后写上列表,而不需要给出条件,系统会自动判断列表是否为空的情况,当列表不为空则符合判断结果为True的情况,系统自动执行if后面的判断语句,返回值为”y“;当列表为空的时候,执行”else“,返回”n“。基于这个概念,来看一看习题5-10中的例子:

#5-10 检查用户名:
#按下面的说明编写一个程序,模拟网站确保每位用户的用户名 都独一无二的方式。
#创建一个至少包含5个用户名的列表,并将其命名为current_users。
#再创建一个包含5个用户名的列表,将其命名为new_users,并确保其中有一两个用户名也包含在列表current_users 中。
#遍历列表new_users,对于其中的每个用户名,都检查它是否已被使用。
#如果是这样,就打印一条消息,指出需要输入别的用户名;否则打印一条消息,指出这个用户名未被使用。



current_users = [\'John\',\'Lisa\',\'MARK\',\'linda\',\'HeLen\']
new_users = [\'John\',\'Lisa\',\'bob\',\'tom\',\'pol\']


for new_user in new_users:
    use = False
    for current_user in current_users:
        if new_user.lower() == current_user.lower():
             use = True
    if use:
        print(new_user.title() + " has been used.")
    else:
        print(\'You can use the name \' + new_user.title())

  在上例中可以看到,按照要求定义两个列表current_users和new_users用来存放姓名,先定义变量new_user用来遍历列表new_users,每次遍历列表new_users中的元素时,都为变量use 赋值False,接着进入内层循环。定义变量current_user来循环遍历列表current_users。当变量new_user的值等于变量current_user的值时,将变量use的值修改为True,此时内层循环结束,进入外层循环的判断中!当user的值为True时,执行if后面的代码,反之执行else后面的代码!还记得上文中对空列表的判断和开头对if语句的定义么?if语句的核心都是一个值为True或False的表达式,区别在于你可以在if后面写上表达式,也可以跳过表达式,直接引用True或False的值本身!其执行结果,如下所示:

John has been used.
Lisa has been used.
You can use the name Bob
You can use the name Tom
You can use the name Pol

  相对而言,例11反而侧重于if语句本身的应用,而非概念,如下所示:

#序数表示位置,如1st和2nd。大多数序数都以th结尾,只有1、2和3例外。
#在一个列表中存储数字1~9。
#遍历这个列表。
#在循环中使用一个if-elif-else 结构,以打印每个数字对应的序数。
#输出内容应为1st 、2nd 、3rd 、4th 、5th 、6th 、7th 、8th 和9th ,但每个序数都独占一行


numbers = [1,2,3,4,5,6,7,8,9]

for number in numbers :
    if number == 1:
        print(str(number) + \'st\')
    elif number == 2:
        print(str(number) + \'nd\')
    elif number == 3:
        print(str(number) + \'td\')
    else:
        print(str(number) + \'th\')

  程序输出结果如下所示:

1st
2nd
3td
4th
5th
6th
7th
8th
9th

 


推荐阅读
  • 本文探讨了如何使用Scrapy框架构建高效的数据采集系统,以及如何通过异步处理技术提升数据存储的效率。同时,文章还介绍了针对不同网站采用的不同采集策略。 ... [详细]
  • Python网络编程:深入探讨TCP粘包问题及解决方案
    本文详细探讨了TCP协议下的粘包现象及其产生的原因,并提供了通过自定义报头解决粘包问题的具体实现方案。同时,对比了TCP与UDP协议在数据传输上的不同特性。 ... [详细]
  • 本文介绍了使用Python和C语言编写程序来计算一个给定数值的平方根的方法。通过迭代算法,我们能够精确地得到所需的结果。 ... [详细]
  • Adversarial Personalized Ranking for Recommendation
    目录概主要内容基础对抗扰动对抗训练细节代码HeX.,HeZ.,DuX.andChuaT.Adversarialpersonalizedrankingforrecommendatio ... [详细]
  • egg实现登录鉴权(七):权限管理
    权限管理包含三部分:访问页面的权限,操作功能的权限和获取数据权限。页面权限:登录用户所属角色的可访问页面的权限功能权限:登录用户所属角色的可访问页面的操作权限数据权限:登录用户所属 ... [详细]
  • C/C++ 应用程序的安装与卸载解决方案
    本文介绍了如何使用Inno Setup来创建C/C++应用程序的安装程序,包括自动检测并安装所需的运行库,确保应用能够顺利安装和卸载。 ... [详细]
  • Canopy环境安装与使用指南
    《利用Python进行数据分析》一书推荐使用EPDFree版本的环境,然而随着技术的发展,目前更多人倾向于使用Canopy。本文将详细介绍Canopy的安装及使用方法。 ... [详细]
  • 本文分享了作者在使用LaTeX过程中的几点心得,涵盖了从文档编辑、代码高亮、图形绘制到3D模型展示等多个方面的内容。适合希望深入了解LaTeX高级功能的用户。 ... [详细]
  • 深入理解iOS中的链式编程:以Masonry为例
    本文通过介绍Masonry这一轻量级布局框架,探讨链式编程在iOS开发中的应用。Masonry不仅简化了Auto Layout的使用,还提高了代码的可读性和维护性。 ... [详细]
  • iOS如何实现手势
    这篇文章主要为大家展示了“iOS如何实现手势”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“iOS ... [详细]
  • 将XML数据迁移至Oracle Autonomous Data Warehouse (ADW)
    随着Oracle ADW的推出,数据迁移至ADW成为业界关注的焦点。特别是XML和JSON这类结构化数据的迁移需求日益增长。本文将通过一个实际案例,探讨如何高效地将XML数据迁移至ADW。 ... [详细]
  • Hadoop MapReduce 实战案例:手机流量使用统计分析
    本文通过一个具体的Hadoop MapReduce案例,详细介绍了如何利用MapReduce框架来统计和分析手机用户的流量使用情况,包括上行和下行流量的计算以及总流量的汇总。 ... [详细]
  • 本文详细介绍了PHP中几个常用的数组回调函数,包括array_filter、array_map、array_walk和array_reduce。通过具体的语法、参数说明及示例,帮助开发者更好地理解和使用这些函数。 ... [详细]
  • 本文探讨了Python中的enchant模块及其提供的dict_exists()函数,该函数用于检测特定语言词典的可用性。 ... [详细]
  • 本文将详细介绍Fuel CMS如何基于CodeIgniter框架构建,包括其单入口模式的实现方式及关键配置文件的作用。通过分析本地环境中的index.php和.htaccess文件,我们将更好地理解Fuel CMS的核心架构。 ... [详细]
author-avatar
天边的云YEAH_988
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有