Python对象类型之判断

发布时间:2021-12-03 公开文章

前言

 

 

 

 

 

着手开始写的时候就一直有一个画面在脑子中出现:小猪佩奇第N级,猪爸爸拿出来一本《混凝土的故事》,打开书的时候说道:混凝土是由砂子、水、水泥组成的,结果其他人都睡着了。于是,我在想,要是给土木人讲:python万法皆对象,对象类型有:

 

  • 数字:int,long,float,complex,bool
  • 字符:str,unicod
  • 列表:list
  • 字典:dict
  • 元组:tuple
  • 文件:file
  • 其他类型:集合(set),冻结集合(frozenset),类类型等。

是不是也有人睡着?相反,如果我直接说砂子、水泥、钢筋、混凝土,是不是觉得亲切?所以接下来将会从一砖一瓦的建筑材料说Python。
万法皆对象:在基建领域,你所看到的构筑物就是有以上提到的基础建材组成;在Python领域对象类型就可以看做基础建筑材料,然后由不同的施工工艺产生不同的单体模块或构造物。例如:一个函数(施工工艺)所包含的参数(基础建材),形成一个伪代码。

伪代码
#围墙条形基础开挖
变量类型:铲子、䦆头、羊角碾、块石、砖头、水泥、混凝土
#工艺流程:
#开挖条形基坑
#夯实基础
#抛填块片石
#混凝土填充找平
#砌砖

如果基坑挖至设计标高,停止开挖;

如果没有到设计标高,接着开挖。

#没错本节讲述的就是If判断

真代码

 

判断语句

基本用法

判断,基于一定的条件,决定是否要执行特定的一段代码,例如判断一个数是不是正数:

x = 0.5
if x > 0:
    print("Hey!")
    print("x is positive")
Hey!
x is positive

在这里,如果 x > 0 为 False ,那么程序将不会执行两条 print 语句。

虽然都是用 if 关键词定义判断,但与C,Java等语言不同,Python不使用 {} 将 if 语句控制的区域包含起来。Python使用的是缩进方法。同时,也不需要用 () 将判断条件括起来。

上面例子中的这两条语句:

print("Hey!")
    print("x is positive")

就叫做一个代码块,同一个代码块使用同样的缩进值,它们组成了这条 if 语句的主体。

不同的缩进值表示不同的代码块,例如:

x > 0 时:

x = 0.5
if x > 0:
    print("Hey!")
    print("x is positive")
    print("This is still part of the block")
print("This isn't part of the block, and will always print.")
Hey!
x is positive
This is still part of the block
This isn't part of the block, and will always print.

x < 0 时:

x = -0.5
if x > 0:
    print("Hey!")
    print("x is positive")
    print("This is still part of the block")
print("This isn't part of the block, and will always print.")
This isn't part of the block, and will always print.

在这两个例子中,最后一句并不是if语句中的内容,所以不管条件满不满足,它都会被执行。

一个完整的 if 结构通常如下所示(注意:条件后的 : 是必须要的,缩进值需要一样):

if <condition 1>:
    <statement 1>
    <statement 2>
elif <condition 2>: 
    <statements>
else:
    <statements>

当条件1被满足时,执行 if 下面的语句,当条件1不满足的时候,转到 elif ,看它的条件2满不满足,满足执行 elif 下面的语句,不满足则执行 else 下面的语句。

对于上面的例子进行扩展:

x = 0
if x > 0:
    print("x is positive")
elif x == 0:
    print("x is zero")
else:
    print("x is negative")
x is zero

elif 的个数没有限制,可以是1个或者多个,也可以没有。

else 最多只有1个,也可以没有。

可以使用 and , or , not 等关键词结合多个判断条件:

x = 10
y = -5
x > 0 and y < 0
True
not x > 0
False
x < 0 or y < 0
True

这里使用这个简单的例子,假如想判断一个年份是不是闰年,按照闰年的定义,这里只需要判断这个年份是不是能被4整除,但是不能被100整除,或者正好被400整除:

year = 1900
if year % 400 == 0:
    print("This is a leap year!")
# 两个条件都满足才执行
elif year % 4 == 0 and year % 100 != 0:
    print("This is a leap year!")
else:
    print("This is not a leap year.")
This is not a leap year.

值的测试

Python不仅仅可以使用布尔型变量作为条件,它可以直接在if中使用任何表达式作为条件:

大部分表达式的值都会被当作True,但以下表达式值会被当作False

  • False
  • None
  • 0
  • 空字符串,空列表,空字典,空集合
mylist = [3, 1, 4, 1, 5, 9]
if mylist:
    print("The first element is:", mylist[0])
else:
    print("There is no first element.")
The first element is: 3

修改为空列表:

mylist = []
if mylist:
    print("The first element is:", mylist[0])
else:
    print("There is no first element.")
There is no first element.

当然这种用法并不推荐,推荐使用 if len(mylist) > 0: 来判断一个列表是否为空。

土木狗的视角:前面讲述了Python对象的基本类型。终于到了语法章节,在工地上很简单,如果达到某标准或进度,就进行下一个工序,这个看起来更像是现场监理干的活。就如上面的伪代码显示的一样,在python里面没有C++的诸多语法,你只要会if判断和for循环就可以做很多事情了,至于while循环的功能,很多都可以由循环和判断语句嵌套(组合)完成。


课后作业(可选)
按上一节运行自己的项目,新建一个*.ipynb文件,将上面代码敲入运行。