python: 条件语句、断言

语句块

1、语句块并非一种语句,语句块是一组满足一定条件时执行一次或多次的语句。语句块的创建方式是在代码前放置空格缩进

2、同一段语句块中的每行语句都要保持同样的缩进,如果缩进不同,python编译器就会认为不属于同一个语句块或认为是错误的。

3、在python中冒号( : )用来表示语句块的开始,语句块中的每一个语句都需要缩进(缩进量相同),当退回到和已经闭合的块一样的缩进时,表示当前语句块已经结束。

4、通常需要注意缩进的关键词有:if , else , elif , while , def , class等。(这些关键词后面都需要加冒号)

 

if语句

1、Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块

2、如果条件(在if和冒号之间的表达式)为真时,后面的语句块就会被执行(才会执行if所属语句块);如果条件为假时,后面的语句块(if语句块)就不会被执行(执行其他分支语句如else,elif)

3、判断的定义:如果条件满足,才能做某件事情,如果条件不满足,就做另外一件事情,或者什么也不做

 

语法

if 条件:
     条件为真(True)时执行的语句
else:
     条件为假(False)时执行的语句

 

判断条件

1、if语句的条件判定除了使用条件符表示大小关系(逻辑运算符)外,还可以使用各个函数或方法的返回值作为判定

2、逻辑运算符:在条件判断中,时常离不开逻辑运算符。判断大小、判断相等、判断成立条件、判断是不是某个容器的一部分等等

 

比较运算符

比较符描述
a == b a等于b(注意不能只用一个=,只用一个=是赋值运算符)
a < b a小于b
a > ba大于b
a >= ba大于等于b
b <= ab小于等于a
a != b  a不等于b

 

 同一性运算符

比较符描述
a is b a和b是同一个对象
a is not ba和b不是同一个对象

 

 成员运算符

比较符描述
a in b   a是容器b里的成员
a not in b a不是容器b里的成员

 

布尔运算符(顺序运算符)

比较符描述
andcondition_a and condition_b
orcondition_a or condiction_b

注:
1、>,<,>=,<=,!=,==,in,not in,is,is not为一元操作符,不能使用其返回值来作为判断条件
2、在Python bool类型中,还有一些情况来表示True或者False:
    ⑴Number:数字等于0的时候为False,其余不管大于还是小于,一律是True
    ⑵String:字符串为空("")的情况下为False,但是String为空格的情况下" ",是True
    ⑶Set、List、Dictionary:字典、列表、集合为空的时候为False,不为空的时候为True。

例1:

#使用逻辑运算符
a = 10
b = 10

if a == b:
    print("a等于b")
else:
    print("a不等于b")

#a等于b

例1_1:

#使用函数的返回值
string = "1234"

if string.isdigit() == True:
    print("字符串全为数字")
else:
    print("字符串不全为数字")


string_1 = "心有猛虎,细嗅蔷薇"

if string_1.split(",")[0] == "细嗅蔷薇":
    print("心有猛虎")
else:
    print("其他")

"""
字符串全为数字
其他
"""

注:从上面例子中可以看出

不只是函数返回True或False时,才可以使用在if语句中,函数返回其他的也可以使用在if语句中:if语句只关心判断条件是否成立,而不关心左右两边是什么

例1_2:

#一元操作符不能使用其返回值来作为判断条件
string = "1234"
print("1" in string) #返回值为True

#错误写法
if "1" in string == True:
    print("1在字符串中")
else:
    print("1不在字符串中")

#正确写法
if "1" in string:
    print("1在字符串中")
else:
    print("1不在字符串中")
"""
1不在字符串中
1在字符串中
"""

注:从上面错误例子的输出结果就可以看出
当判断条件为一元操作符时,不能使用其返回值作为判断条件(==的优先级比in高,因此会先计算==),要避免这种情况可以使用下面的方法

例1_3:

if "a" in "abc" == True:#==的优先级比in,因此是先执行的==
    print("'a'在'abc'中")
else:
    print("'a'不在'abc'中")

if ("1" in "123") == True:#可以使用括号来确定优先级
    print("'1'在'123'中")
else:
    print("'1'不在'123'中")
    
"""
'a'不在'abc'中
'1'在'123'中
"""

 

else子句

1、在使用if判断时,只能做到满足条件时要做的事情。那如果在不满足条件的时候就需要用到else子句了

2、之所以叫子句,是因为else不是独立语句,它只能作为if语句的一部分。使用else子句可以增加一种选择

3、if可以单独使用(后面可以不跟else子句),但else不能单独出现(if语句后可以选择用不用else,且else可以与while结合使用)

4、else子句后面没有判定条件(表示其他一切情况:一切条件不成立的情况。一切为False是情况都会执行else语句块)

例2:

number = int(input("请输入分数:"))

if  90<= number <=100:
    print("A")
else:
    print("B")
    
"""
请输入分数:50
B
"""

例2_1:

number = int(input("请输入分数:"))

if 90<= number <= 100:
    print("A")
if number >= 80 and number <= 89:
    print("B")
if 60<= number <= 79:
    print("C")
if 0<= number <= 59:
    print("D")
else:
    print("输入分数错误:不能小于0或大于100")

"""
请输入分数:101
输入分数错误:不能小于0或大于100
请输入分数:100
A
请输入分数:0
D
请输入分数:-1
输入分数错误:不能小于0或大于100
"""

例2_2:

number = int(input("请输入分数:"))

if number > 100:
    print("输入分数错误:不能大于100")
else:
    if 90<= number <= 100:
        print("A")
    else:
        if number >= 80 and number <= 89:
            print("B")
        else:
            if 60<= number <= 79:
                print("C")
            else:
                if 0<= number <= 59:
                    print("D")
                else:
                    if number < 0:
                        print("输入分数错误:不能小于0")

"""
请输入分数:-1
输入分数错误:不能小于0
"""

注:从上面的例子中可以看出
1、相同的if与else属于同一层级(缩进)

2、else子句后可以继续细分判断条件(继续跟if),只是需要注意下缩进

 

elif子句

1、如果除if条件外,还有多个子条件需要判定就可以使用elif语句,elif是else if的简写,elif后面跟判定条件

2、elif语句与if是同一缩进,所以在使用elif语句时,需要保证elif语句的缩进与if语句的缩进一致

3、同样elif也不能单独出现,其需要和if、else子句联合使用,并且必须以if语句开头,可以选择是否以else语句结束。

例3:

number = int(input("请输入分数:"))

if number > 100:
    print("输入分数错误:不能大于100")
elif 90<= number <= 100:
    print("A")
elif number >= 80 and number <= 89:
    print("B")
elif 60<= number <= 79:
    print("C")
elif 0<= number <= 59:
    print("D")
elif number < 0:
    print("输入分数错误:不能小于0")

"""
请输入分数:73
C
"""

注:
1、由于python并不支持 switch 语句,所以多个条件判断,只能用elif来实现

2、如果判断需要多个条件需同时判断时,可以使用or或and:or(或)表示两个条件有一个成立时判断条件成功;and(与)时,表示只有两个条件同时成立的情况下,判断条件才成功。

3、当if有多个条件时可使用括号来区分判断的先后顺序,括号中的判断优先执行,此外and和or的优先级低于>(大于)、<(小于)等判断符号,即大于和小于在没有括号的情况下会比与或要优先判断

 

断言

assert这个关键字成为"断言"

目的

1、在没有完善一个程序前,我们不知道程序哪里会出错,与其在运行时崩溃,不如在出现错误条件的时候就崩溃。

2、一般来说,可以要求一些条件必须为真(条件必须为真时程序才能继续运行)。在python中assert关键词便能实现这种工作方式。

3、当assert后面的条件为真时,程序正常运行;当assert的条件为假时,输出错误信息。错误的提示信息由我们自己定义,这个错误提示信息可以成为异常信息

4、assert的异常参数是在断言表达式后面添加的字符串信息,用来解释断言并更容易知道问题出在哪里。
格式如下:

assert 表达式 [, 参数]

使用assert断言时,要注意以下几点:

1、assert语句用来声明某个条件是真的。

2、如果你非常确信某个你使用的列表中至少有一个元素,而你想要检验这一点,并且在它非真的时候引发一个错误,那么assert语句是应用在这种情形下的理想语句。

3、当assert语句失败的时候,会引发一AssertionError。 

例4:

#断言通过,程序正常运行
string = "hello,world"

assert "world" in string,"world没有在字符串中"

例4_1:

#断言不通过,程序报错
string = "hello,world"

assert "word" in string,"word没有在字符串中"

#AssertionError: word没有在字符串中

 

pass语句

Python pass是空语句,是为了保持程序结构的完整性。pass不做任何事情,一般用做占位语句
例5:

for letter in 'Python':
    if letter == 'h':
        pass
        print('这是 pass 块')
    print('当前字母 :', letter)

"""
当前字母 : P
当前字母 : y
当前字母 : t
这是 pass 块
当前字母 : h
当前字母 : o
当前字母 : n
"""

 

if语句补充

if语句中执行的条件为:

    if 条件:
        条件为真(True)时执行的语句

注:在Python中除了使用常用的>,<,>=,<=,!=,==,in,not in等表示判断条件为,还有其他语句能表示判断条件

 

使用if not来进行判断

例1:如,有一篇TXT文件,需要使用循环来依次输出文件中的每一行

file = open("C:\\Py_Demo\\test.txt","r")

while True:
    file_each_line = file.readline()
    print(file_each_line)
    if not file_each_line:#file_each_line为空时为False
        break

#输出为文件中的每一行

注:
1、代码中使用的是while True来读取文件中的每一行,如果不加上break语句的话,就会死循环下去

2、当读到文件最后一行后,程序继续往下读,读出来的为空字符串(即:""),在python中空字符串表示False

3、if not...的意思为not后面的条件为假时才会执行该语句(not表示相反,那么not后的需要为False整个条件才为True:not file_each_line为真时才会执行)

4、逻辑运算符not对一个条件取反

例1_1:上面例子也可以这么写

file = open("C:\\Py_Demo\\test.txt","r")

while True:
    file_each_line = file.readline()
    if file_each_line != "":#空字符串不等于None
        print(file_each_line)
    else:
        break

例1_2:也可以这么写

file = open("C:\\Py_Demo\\test.txt","r")

while True:
    file_each_line = file.readline()
    if file_each_line: #这种写法后面介绍
        print(file_each_line)
    else:
        break

 

使用is not None来判断

例2:

list = []

if list is not None:
    print("list不为None")
else:
    print("list为None")


name = None
if name is not None:
    print("name不为None")
else:
    print("name为None")

"""
list不为None
name为None
"""

注:
1、上面例子中使用了xx  is not None来进行条件判断:[ ]是空列表,其表示False但其不是None

2、xx is not None 只是判断xx是不是None类型,如果不是None类型,则返回True

 

使用if xx来进行判断

例3:

list = [1,2]

if len(list) != 0:
   print("Not empty!")

if list:
   print("Not empty!")

"""
Not empty!
Not empty!
"""


例3_1:

import re

s1 = 'adkkdk'
s2 = 'adkkdk1'

# 判断s1字符串是否负责都为小写的正则
an = re.search('^[a-z]+$', s1)
print(an)
if an:
    print("yes")
else:
    print('no')

if an != None:
    print("yes")

an2 = re.search('^[a-z]+$', s2)
print(an2)
if an2:
    print("yes")
else:
    print('no')
    
"""
<_sre.SRE_Match object; span=(0, 6), match='adkkdk'>
yes
yes
None
no
"""


例3_2:

list = []

#判断list是否为None
if list is not None:
    print("list不为None")
else:
    print("list为None")

#判断list是否为空(列表)
if list:
    print("list不为空")
else:
    print("list为空")

"""
list不为None
list为空
"""

总:
1、if xx is not None和if xx是不同的:xx is not None只是判断xx是不是None类型,如果不是None类型,则返回True

xx is not None = xx != None(XX不为None)

2、if xx除了判断是不是None类型,还会判断其他的

if xx = 
if xx != None and xx != '' and xx != False and xx != 0 and xx != [] and xx !={} and ...

3、在python中None, False, 空字符串"", 0, 空列表[ ], 空字典{ }, 空元组( )都相当于False,但它们不等于None(除None自身)

4、空列表的布尔值为False,但是空列表中如果有个None或空格,那么布尔值为True,列表的布尔值判断只针对列表中的元素,若元素为空,才是False

 

备注

1、在python中None, False, 空字符串"", 0, 空列表[ ], 空字典{}, 空元组()都相当于False

2、空字符串"",0, 空列表[], 空字典{}, 空元组()不等于None

3、None是一个特殊的对象,而一个对象的布尔值是由__bool__和__len__ 特殊方法决定的

例4:

print(bool([]))
print(bool(""))
print(bool(None))
print(0==None)
print([]!=None)

"""
False
False
False
False
True
"""

 

 

if 条件控制语句:补充

1、条件控制语句是通过一条或多条语句的执行结果(True 或者 False)来决定执行的代码块

2、if后面应该接一个条件,即一个布尔类型

3、if...else...条件,表示如果..否则..,if 后面的条件成立则执行,if如果不成立就执行else,else后面是没有条件的


Python中if else语句的流程


例1:正常的if else语句

flag = False
name = 'luren'
if name == 'python':         # 判断变量是否为 python
    flag = True              # 条件成立时设置标志为真
    print('welcome boss')     # 并输出欢迎信息
else:
    print(name)
    
#luren

注:上面的例子表示:

1、如果变量name等于'python',则执行if下面的语句(输出'welcome boss'等),如果不等于则执行else下面的语句(输出name)

2、不满足if条件之外的任何条件都将执行else下的语句

 

 

elif语句

1、在多个条件下,Python的else if简写成了elif

2、在判断语句中可以有多个if、可以有if无else、可以有多个elif,但不能有多个else语句:同一缩进下不能有多个else

例2:else...if语句

number = int(input("请输入分数:"))

if number > 100:
    print("输入分数错误:不能大于100")
else:
    if 90 <= number <= 100:
        print("A")
    else:
        if number >= 80 and number <= 89:
            print("B")
        else:
            if 60 <= number <= 79:
                print("C")

"""
请输入分数:61
C
"""

例2_1:elif语句

number = int(input("请输入分数:"))

if number > 100:
    print("输入分数错误:不能大于100")
elif 90 <= number <= 100:
    print("A")
elif number >= 80 and number <= 89:
    print("B")
elif 60 <= number <= 79:
    print("C")

else:
    print("D")

"""
请输入分数:1
D
"""

注:
1、elif是else if的缩写:即if后面的语句是else语句下面的语句块,要先不满足前面的if(与else同缩进的if),执行的是else(例2_1的执行与例2是一样的,可以结合起来想)
2、elif就是要:先else后再if,即先满足else,然后再在else下进行if判断


例2_2:

amount = int(input("Enter amount: "))

if amount < 1000:
    discount = amount * 0.05
    print("Discount", discount)

# else:
#     if amount < 5000:
#         discount = amount * 0.10
#         print("Discount", discount)
elif amount < 5000:
    discount = amount * 0.10
    print("Discount", discount)

else:
    discount = amount * 0.15
    print("Discount", discount)

"""
Enter amount: 5000
Discount 750.0

Enter amount: 4000
Discount 400.0

Enter amount: 500
Discount 25.0
"""

注:
当输入的amount=500时,按理来说它是满足小于1000和小于5000的(满足第一个if和elif的),但是实际上在执行时只执行了第一个if,没有执行后面的elif语句
    ⑴这说明在同一个if...elif...else语句块中,如果满足了一个if语句后,就不会在执行后面的语句了(elif或else子句)
    ⑵if...elif...else...语句中:if、elif、else处于同一缩进,是同一代码块,它们在代码执行逻辑上是并列关系的,因此:
        ①满足if语句后,就不会再执行后面的elif和else语句块了
        ②不满足if,此时执行elif,如果满足elif的话,就不会执行后面的else了
        ③if和elif都不满足的话,就执行else了
        ④所以说:elif就是要,先else后再if,即先满足else,然后再在else下进行if判断
    ⑶这种情况要区分后面"例2_3:多个if语句"中的代码
        ①那个例子里面的多个if属于同一个层级,是相同的代码块(在执行逻辑上是并列关系),它们是并列关系,因此判断了第一个if,会继续执行并判断后面的if(不管第一个if是否满足,都会从零开始判断后面的if,前后if是完全没关系的)
        ②而在这个例子中只有一个if并且后面的elif和else都属于if的子句,因此如果if满足条件了,就不会执行后面的子句了(只有第一个if不满足时才会判断后面的elif和else,是在if判断的基础上继续判断elif和else的)

    
例2_2_1:    

amount = int(input("Enter amount: "))


#调整代码语句顺序:将amount < 5000条件写在前面,把amount < 1000写在后面,其余都没变
if amount < 5000:
    discount = amount * 0.10
    print("Discount", discount)

elif amount < 1000:
    discount = amount * 0.05
    print("Discount", discount)

else:
    discount = amount * 0.15
    print("Discount", discount)

"""
Enter amount: 500
Discount 50.0
"""


例2_2_2:分清判断条件,不要使判断条件有交集

amount = int(input("Enter amount: "))


if 1000<=amount < 5000:
    discount = amount * 0.10
    print("Discount", discount)

elif amount < 1000:
    discount = amount * 0.05
    print("Discount", discount)

else:
    discount = amount * 0.15
    print("Discount", discount)

"""
Enter amount: 500
Discount 25.0
"""

注:

总结这个例子和"例2_3:多个if语句":
    ⑴在写判断语句时,最好按照标准的if...elif...else来写,不要写多个if并列
    ⑵在写条件语句时,最好要分清楚判断条件,最好不要将判断条件写来有交集,即输入只会满足一个条件。如果判断条件写来有交集了,就需要分清代码的执行顺序了


例2_3:多个if语句

money = 17
if money > 18:
    print("今天吃鸡")
if 10 < money <= 18:
    print("今天吃鱼")
if money == 0:
    print("今天不吃了")

#今天吃鱼

注:
1、if语句可以是单独存在的,后面可以接else也可以不接else、elif语句等

2、上面例子中的if是同一个缩进,是相同的语句块,它们是并列的存在(在执行逻辑上是并列关系),即:判断了第一个if会判断第二个if,然后继续判断第三个if,因此这种写法可能会出现既满足第一个if也满足第二个if等情况。所以说不赞成使用这种写法,还是按照if...else...或存在多个条件时使用if...elif...else的写法(后面会有这种情况的例子)

3、从第二点的说明可以说明:如果要这种写法的话,就需要保证只满足一个条件(一个if语句),如果满足多个if的话,可能输出就不是我们预期的了

例2_4:

import datetime

selectData = [
              {'price': 141.0, 'create_time': datetime.datetime(2020, 5, 17, 14, 26, 23), 'author': '曹雪芹', 'title': '红楼梦', 'content': b'\xe5\x88\x98\xe5\xa7\xa5\xe5\xa7\xa5\xe8\xbf\x9b\xe5\xa4\xa7\xe8\xa7\x82\xe5\x9b\xad'},
              {'price': 140.0, 'create_time': datetime.datetime(2020, 5, 17, 14, 27), 'author': '施耐庵', 'title': '水浒传', 'content': b'\xe9\x80\xbc\xe4\xb8\x8a\xe6\xa2\x81\xe5\xb1\xb1'}
            ]

list = []
for eachData in selectData:
    """
    对字典中的值进行处理更新:需要注意的就是这个例子中这两个if是并列关系,而不是if...elif关系(所以还是要根据实际场景来)
    """
    if 'create_time' in eachData:
        eachData['create_time'] = eachData['create_time'].strftime("%Y-%m-%d %H:%M:%S")
    else:
        print("该结果中无create_time字段值")

    if 'content' in eachData:
        eachData['content'] = eachData['content'].decode(encoding="utf-8")
    else:
        print("该结果中无content字段值")
    list.append(eachData)

print(list)

"""
[{'create_time': '2020-05-17 14:26:23', 'price': 141.0, 'content': '刘姥姥进大观园', 'title': '红楼梦', 'author': '曹雪芹'}, 
{'create_time': '2020-05-17 14:27:00', 'price': 140.0, 'content': '逼上梁山', 'title': '水浒传', 'author': '施耐庵'}]
"""

 

Python的就近原则

1、Python是通过缩进控制条件块的,相同缩进数的语句在一起组成一个语句块

2、Python中if else的就近原则与PHP、C语言等的if else的就近原则不同:在C语言中,if  else的匹配是就近原则,和最近的那个匹配。但是在Python中,if else的匹配是按照空格缩进相同的原则去匹配


例3:C语言中的if...else

if (i>2)
    if(i>7)
        printf("OK")
else:
    printf("Bad")

注:
这种写法在C语言中的话:else就是属于内层的那个if,但是在Python中,它是属于第一个if的,因为它与第一个if的缩进相同(else表示i>2之外的任何情况)
 

例3_1:Python中的if...else

number = int(input("输入数字:"))

if number > 3:
    print("大于3:",number)

if number > 5:
    print("大于5:",number)

else:
    print("小于3:",number)

"""
输入数字:6
大于3: 6
大于5: 6
-----------------------------------
输入数字:4
大于3: 4
小于3: 4
"""

注:
1、上面这种写法就是我前面说的不赞成写的方法:满足多个if语句

2、在这种写法中:else属于第二个if,虽然两个if和else的缩进都一致,但是else与第二个if最近,因此else与第二个if又组成一个if...else语句

3、上面例子的意思是:第一次判断number是否大于3(满足,输出大于3);第二次判断number是否大于5(满足,输出大于5),不满足就输出小于3。因此else是与第二个if组成了一个if...else语句。它们与第一个if是没有什么关系的

4、所以要分清楚:else是与哪个if组成"如果..否则"的关系

 

 

实例

1、这几天在写自动化脚本时,在写判断语句时,就写成了if...if...else的形式,所以输出一直不对,最后把自己也搞晕了,所以今天特地来补充了下

2、需求大概是,过滤一个字典中的键值:将需要的键值对添加到一个新字典中,同时如果加到新字典中的键的值时空字符串(""),则将其中改为"null"

例4:最开始是这样写的

dict1 = {'destination': '四川', 'planfromtime': '2100', 'preparetotime': '0011', 'departure': '成都',
          'departureEncode': 'BBB','plantotime': '0145', 'destinationEncode': 'FFF', 'executedate': '2019-01-05',
          'fnumber': 'B-123S', 'status': '正常', 'fromtime': '','preparefromtime': '', 'totime': '',
         'stopposition': 'SSS', 'models': '坦克'}


msgCheckList = ["fromtime", "totime", "preparefromtime", "preparetotime", "planfromtime", "plantotime",
                "models","fnumber", "stopposition", "status"]
msgCheckDict = {}
for eachKey in dict1:
    if eachKey in msgCheckList:
        if dict1[eachKey] == "":
            msgCheckDict[eachKey] = "null"

        if eachKey in ["preparefromtime", "preparetotime", "planfromtime", "plantotime"]:
            value = dict1["executedate"] + " " + str(dict1[eachKey][:2]) + ":" + str(dict1[eachKey][2:4]) + ":00"
            msgCheckDict[eachKey] = value

        else:
            msgCheckDict[eachKey] = dict1[eachKey]
            #在C语言中,if  else的匹配是就近原则,和最近的那个匹配,但是在Python中,if else的匹配是按照空格缩进相同的原则去匹配

print(msgCheckDict)

"""
{'preparefromtime': '2019-01-05 ::00', 'status': '正常', 'totime': '', 'fnumber': 'B-123S', 'stopposition': 'SSS', 'fromtime': '', 
'models': '坦克', 'planfromtime': '2019-01-05 21:00:00', 'preparetotime': '2019-01-05 00:11:00', 'plantotime': '2019-01-05 01:45:00'}
"""

注:
1、从上面的数据可以看到,实际的输出不是我预期的:值为空字符串的没有变为'null',且部分时间值的拼接也有错'2019-01-05 ::00'

2、刚开始我的思路的:如果值为空字符串,则更新值为null,如果键在msgCheckList里面则拼接对应键的值,都不满足则直接将键值对加到新字典中

3、之所以出现上面这种情况是因为:第二个if与后面的else组成了"如果...否则"的关系

4、即,实际语句的意思是:如果dict1[eachKey]等于空字符串(则更新值为null),如果eachKey又在列表里面(则拼接值),否则将原字典的键值对加到新字典中

5、比如遍历出来的键为totime,第一次判断其值是否为空(满足,将其值更新为null);第二次判断其是否在列表中(不满足),则将其原键值对加到新列表中:也就是说第一个if是更新成功了的,但是不满足第二个if,因此执行了第二个if下的else

6、同样比如遍历出来的键是preparefromtime:第一次判断其值是否为空(满足,将其值更新为null);第二次判断其是否在列表中(满足,拼接其值)。由于满足了第二个if,因此不再执行第二个if下的else了

7、所以说不要这种写法(多个if):如果要这么写的话,就必须写清楚条件,保证只满足一个if,不能同时满足多个if。然后就是分清楚多个if和else的关系。多个if是并列关系,都会进行判断的



例4_1:解决办法

dict1 = {'destination': '四川', 'planfromtime': '2100', 'preparetotime': '0011', 'departure': '成都',
'departureEncode': 'BBB', 'plantotime': '0145', 'destinationEncode': 'FFF', 'executedate': '2019-01-05',
'fnumber': 'B-123S', 'status': '正常', 'fromtime': '', 'preparefromtime': '', 'totime': '',
'stopposition': 'SSS', 'models': '坦克'}


msgCheckList = ["fromtime", "totime", "preparefromtime", "preparetotime", "planfromtime", "plantotime",
"models", "fnumber", "stopposition", "status"]
msgCheckDict = {}
for eachKey in dict1:
    if eachKey in msgCheckList:
        if dict1[eachKey] == "":
            msgCheckDict[eachKey] = "null"

        elif eachKey in ["preparefromtime", "preparetotime", "planfromtime", "plantotime"]:
            value = dict1["executedate"] + " " + str(dict1[eachKey][:2]) + ":" + str(dict1[eachKey][2:4]) + ":00"
            msgCheckDict[eachKey] = value

        else :
            msgCheckDict[eachKey] = dict1[eachKey]



print(msgCheckDict)

"""
{'models': '坦克', 'fromtime': 'null', 'stopposition': 'SSS', 'fnumber': 'B-123S', 
'plantotime': '2019-01-05 01:45:00',
'status': '正常', 'totime': 'null', 'planfromtime': '2019-01-05 21:00:00', 
'preparetotime': '2019-01-05 00:11:00', 'preparefromtime': 'null'}
"""

注:

这种写法就是标准的if...elif...else,当满足第一个if语句后就结束了(不会再执行后面的elif或elsel )。肯定推荐这种写法

 

例4_2:解决办法

dict1 = {'destination': '四川', 'planfromtime': '2100', 'preparetotime': '0011', 'departure': '成都',
          'departureEncode': 'BBB','plantotime': '0145', 'destinationEncode': 'FFF', 'executedate': '2019-01-05',
          'fnumber': 'B-123S', 'status': '正常', 'fromtime': '','preparefromtime': '', 'totime': '',
         'stopposition': 'SSS', 'models': '坦克'}


msgCheckList = ["fromtime", "totime", "preparefromtime", "preparetotime", "planfromtime", "plantotime",
                "models","fnumber", "stopposition", "status"]
msgCheckDict = {}
for eachKey in dict1:
    if eachKey in msgCheckList:
        if dict1[eachKey] == "":
            msgCheckDict[eachKey] = "null"
            continue
        if eachKey in ["preparefromtime", "preparetotime", "planfromtime", "plantotime"]:
            value = dict1["executedate"] + " " + str(dict1[eachKey][:2]) + ":" + str(dict1[eachKey][2:4]) + ":00"
            msgCheckDict[eachKey] = value

        else:
            msgCheckDict[eachKey] = dict1[eachKey]
            #在C语言中,if  else的匹配是就近原则,和最近的那个匹配,但是在Python中,if else的匹配是按照空格缩进相同的原则去匹配

print(msgCheckDict)

"""
{'totime': 'null', 'preparetotime': '2019-01-05 00:11:00', 'fromtime': 'null', 'status': '正常', 'models': '坦克', 'preparefromtime': 'null', 
'planfromtime': '2019-01-05 21:00:00', 'plantotime': '2019-01-05 01:45:00', 'fnumber': 'B-123S', 'stopposition': 'SSS'}

"""

注:
上面这种写法是,在第一个if语句后面加了一个continue语句,即:满足第一个if语句后,跳出此次循环,不再执行后面的语句,则保证了如果还满足后面if的条件或满足else时,不会执行。只是说这种写法需要分清楚多个if的先后顺序


 

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 创作都市 设计师:CSDN官方博客 返回首页