十四、if 语句

1、if 语句

每条if 语句核心都是一个值为true或者false的表达式,这种表达式被称为“条件测试”,如果为true则执行if后面的语句,否则执行else后的语句。

cars = ['audi', 'bmw', 'subaru', 'toyota']   # 定义一个列表
for car in cars:                              # 遍历列表所有元素
    if car == 'bmw':                           # 当car为bmw时,输出全部为大写字母,否则首字母大写
        print(car.upper())
    else:
        print(car.title())

Audi
BMW
Subaru
Toyota

1.1、检查条件测试是否相等

大多数条件测试都将一个变量的当前值与特定的值比较:

car = 'bmw'       # 一个等号为陈述,将字符串赋值给变量car
car == 'bmw'    # 两个等号为发问,意为car的值是否为bmw
True

1.1.1、检查是否相等时不考虑大小写

>>> car = 'Audi'     
>>> car == 'audi'
False

>>> car.lower() == 'audi'  # 将变量car的值转换为小写,再与'audi'比较,两个值相同,则返回True
True

>>>car    # 不影响原有变量的值
'Audi'

网站可能采用类似的方式测试用户名的唯一性,当用户提交新的用户名时,将其转换为小写,并于所有既有用户名的小写版本进行比较,如果已有用户名‘john’(不论大小写如何),则用户提交用户名‘john’时将早到拒绝。

1.1.2、检查是否不想等

判断不想等,使用(!=)

requested_tooping = 'muushrooms'
if requested_tooping != 'anchovies':
  print('Hold the anchovies!')

1.1.3、比较数字

比较数字,可以比较是否相等、不相等、大于、小于、大于等于、小于等于:

age = 18
if age > 18:
  print('Very young!')

1.1.4、检查多个条件

有时需要检查多个条件,都为true用(and)执行,只要一个为true用(or)执行。

age_0 = 22
age_1 = 18
age = 20
if (age_1 > age) or (age < age_0):
    print(age)
    
20

1.1.5、检查特定值是否在列表中

检查一个值是否存在列表中时,可以采用成员操作符(in 、not in)

a = [1, 2, 3, 4, 5]
b = [6]
if b not in a:      # 也可以用in
    print('I Love You!')
else:
    pass
I Love You!

1.2、简单的if语句

if condition_test:

​ do something

一个简单的if语句,只有一个测试和一个操作,如果条件为真则执行缩进后的代码块。

1.2.1、if-else 语句

条件测试通过执行if 后的代码块,否则执行else 后的代码块

1.2.2、if-elif-else 结构

有时,条件测试有超过2个的情形,那么if-elif-else结构就可以帮助实现,它可以无限测试:

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

print('Your admission cost is $' + str(price) + '.')

Your admission cost is $5.

1.2.3、省略else 代码块

python并不要求if-elif后必须有else代码块,有些情况很有用,但是有些情况使用elif语句处理特定情形更清晰,只要不满足if和elif条件,就执行else语句,有可能引入无效甚至恶意的数据。

age = 12
if age < 4:
    price = 0
elif 4 < age < 18:
    price = 5
elif 18 < age < 65:
    price = 10
elif age >= 65:
    price = 5

print('Your admission cost is $' + str(price) + '.')

1.2.4、测试多个条件

if-elif-else 功能强大,但只能满足一个条件,如果需要许多条件都符合,则不适用。

如:要判断顾客点的2种披萨配料是否都在列表中,显然用if-elif-else结构并不适用,此时,多个条件测试正好可以实现。

# 三个条件独立测试,互不影响
requested_toopings = ['mushrooms', 'extra cheese']

if 'mushrooms' in requested_toopings:
    print('Adding mushrooms.')

if 'pepperoni' in requested_toopings:
    print('Adding pepperoni.')

if 'extra cheese' in requested_toopings:
    print('Adding extra cheese.')

print('\nFinished making your pizza!')

Adding mushrooms.
Adding extra cheese.

Finished making your pizza!

1.3、使用if 语句处理列表

1.3.1、检查特殊元素

如一个列表中包含制作披萨的配料,顾客在点某种配料时,发现店里已经没有了,那么检查特殊情况就显得很重要了。

# 三种披萨配料存储在变量requseted——tooping中
requested_toopings = ['mushrooms', 'green peppers', 'extra cheese']

for requested_tooping in requested_toopings:
   print('Adding ' + requested_tooping + '.')
print('\nFinished making your pizza!')


# 当青椒‘green peppers’没有时
requested_toopings = ['mushrooms', 'green peppers', 'extra cheese']

for requested_tooping in requested_toopings:
    if requested_tooping == 'green peppers':  # 当青椒‘green peppers’没有时,告知客户没有了
        print('Sorry, we are out of green peppers right now.')
    else:
        print('Adding ' + requested_tooping + '.')
print('\nFinished making your pizza!')

1.3.2、确定列表是否为空

一个列表,在if语句判断条件时,如果列表名作为条件表达式,列表不为空,返回True,否则返回False。

# 在制作披萨前检查顾客的配料列表是否为空,空的就问顾客是否要点披萨,不为空则按照之前的方式制作披萨
requested_toopings = []

if requested_toopings:     # 判断列表是否为空,不为空执行下列语句
  for requested_tooping in requested_toopings:
    print('Adding ' + requested_tooping + '.')
   print('\nFinished making your pizza!')
else:                                        # 列表为空执行
  print('Are you sure you want a plain pizza?')
  
Are you sure you want a plain pizza?
  

1.3.3、使用多个列表

有时顾客的要求五花八门,我们要先检查顾客点的配料的列表是否在店里配料列表里,再进行后续操作。

available_tooping = ['mushrooms', 'olives', 'green peppers', 'pepperoni', 'pineapple', 'extra cheese']      # 店里披萨配料列表
requested_toopings = ['mushrooms', 'french fries', 'extra cheese']  # 顾客点的配料列表

for requested_tooping in requested_toopings:   # 遍历顾客配料列表
    if requested_tooping in available_tooping:    # 如果配料在店里配料列表中则执行如下操作,否则执行else语句。
        print('Adding ' + requested_tooping + '.')

    else:
        print("Sorry, we don't have " + requested_tooping + '.')
print('\nFinished making your pizza!')

练习题

# 创建一个至少包含5个用户名的列表(current_users)再创建一个包含5个用户名的新列表(new_users),确保其中一两个在第一个列表中,遍历new_users,检查其中的用户名是否已经使用过,如果是打印已经被使用,否则打印未被使用,确保比较时不区分大小写,‘john’被使用,应拒绝‘jOHn’
current_users = ['eric', 'willie', 'admin', 'erin', 'Ever']
new_users = ['sarah', 'Willie', 'PHIL', 'ever', 'Iona']

current_users_lower = [user.lower() for user in current_users]  # 把第一个列表中的元素变成小写

for new_user in new_users:
    if new_user.lower() in current_users_lower:   # 判断第二个列表中元素小写后是否在第一个列表中的小写列表中
        print('Please enter another user name!')

    else:
        print('This username is not used!')
        
This username is not used!
Please enter another user name!
This username is not used!
Please enter another user name!
This username is not used!
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 通过结合使用if语句和列表,可完成一些有趣的任务:对列表中特定的值做特殊处理;高效地管理不断变化的情形,如餐馆是否...
    一日歌阅读 3,217评论 2 4
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,680评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 34,818评论 18 399
  • 太史公司马迁的一生是有味道的一生。因写《史记》,他成了后世史学家的楷模,然而却无人能超过他。然司马迁因受宫刑,自知...
    柚子的学长阅读 1,156评论 0 5
  • 第二章:掌握临界知识的底层思维和方法 这章有四小节 一.跳出“低水平勤奋陷阱” 二.学习临界知识 三.提升学习能力...
    掏出来搞事阅读 551评论 0 0

友情链接更多精彩内容