十四、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!
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,529评论 5 475
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,015评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,409评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,385评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,387评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,466评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,880评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,528评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,727评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,528评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,602评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,302评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,873评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,890评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,132评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,777评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,310评论 2 342

推荐阅读更多精彩内容

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