前面学习了 python 中的基础数据类型,现在开始学习 python 中和程序结构相关的内容,首先从基础语句开始

  • 语句简单分类
  • if 语句
  • for 语句
  • while 语句
  • 解析式语句

语句类型

python 程序语言里面语句较多,基本是一个或多个关键字对应一个语句类型,常用的语句类型如下:

  • 赋值语句
  • 判断语句
  • 循环语句
  • 解析式语句
  • 异常捕获语句
  • 函数定义语句
  • 函数调用语句
  • 类定义语句
  • 类使用语句
  • 包引入语句

这里我们只介绍 赋值语句判断语句 、 *循环语句*、解析式语句 ,其他语句适合特定类容相关的,在后面和内容一起介绍。

在 python 中语句嵌套组合,形成更复杂的程序结构。

赋值语句

还记的变量吧,赋值语句主要是针对变量的。每个赋值语句一定包含 = 操作符,或者含有 = 语义的操作符,例如:+=*=/=等。 一个赋值语句包含三部分:=操作符、左值、右值。在=左边的的表达式计算结果称为左值,在=右边的表达式计算结果称为右值。

  • 左值的计算结果一定是一个变量或引用
  • 右值的计算记过一定是一个对象

例如:

a=1, 这里 a 表示左值,是一个变量;1 表示右值,是一个对象 L[a+1]=5*3, 这里 L[a+1] 表示左值,计算的结果是表示一个引用;5*3 表示右值,计算的结果是一个对象

In[1]:  
a=1
a
执行结果:
In[2]:  
a += 5
a
执行结果:

注意:= 操作不要求左值变量已经创建,如果没有定义会自行创建。但是在使用 +=*=/= 等类似操作符时,要求 左值既是一个对象,也是一个变量或引用。因为这类操作符是先计算并获取左值引用的对象,然后使用这个对象和右值计算的对象做运算,最后在赋值给左值的变量或引用。

In[3]:  
# 由于 变量 b 没有定义,所以在计算 b 的对象时会发生错误
b += 1
执行结果:

if 语句

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

可以通过下图来简单了解条件语句的执行过程:

Python程序语言指定任何非0和非空(null)值为true,0 或者 null 为false。

Python 编程中 if 语句用于控制程序的执行,基本形式为:

if 判断条件:
    执行语句……
else:
    执行语句……

其中”判断条件”成立时(非零),则执行后面的语句,而执行内容可以多行,以缩进来区分表示同一范围。

else 为可选语句,当需要在条件不成立时执行内容则可以执行相关语句,具体例子如下:

In[4]:  
name='Lilei'

if name=='Lilei':
    print("My name is Lilei!")
else:
    print("My name is Hanmeimei!")
执行结果:

if 语句的判断条件可以用>(大于)、<(小于)、==(等于)、>=(大于等于)、<=(小于等于)来表示其关系。

当判断条件为多个值时,可以使用以下形式

if 判断条件1:
    执行语句1……
elif 判断条件2:
    执行语句2……
elif 判断条件3:
    执行语句3……
else:
    执行语句4……
In[5]:  
name='Hanmeimei'

if name=='Lilei':
    print("My name is Lilei!")
elif name=='Hanmeimei':
    print("My name is Hanmeimei!")
elif name=='dog':
    print("Sorry, this is a dog!")
else:
    print("This is an ET!")
    
    
name='apple'

if name=='Lilei':
    print("My name is Lilei!")
elif name=='Hanmeimei':
    print("My name is Hanmeimei!")
elif name=='dog':
    print("Sorry, this is a dog!")
else:
    print(name + " is an ET!")
执行结果:
判断条件 是一个计算结果为 Boolean 值对象 得表达式。在《Python学习 03:python 数值类型》介绍的的 *比较运算符*、*逻辑运算符*、*成员运算符*、身份运算符 这些操作的结果都是 Boolean 值对象,包含后面将介绍的的 *返回 Boolean 值对象的函数调用操作*,只要任意以表达式返回Boolean 值对象都可以作为 if 语句的判断条件
In[6]:  
item = 2
L = [1,2,3]

# 成员运算
if item in L:
    print("%d 在 %s 中" %(item, str(L))) 
else:
    print("%d 没在 %s 中" %(item, str(L)))
    
# 比较运算符    
a = 1
b = 2
if a==b:
    print("a 等于 b")
else:
    print("a 不等于 b")

# 逻辑运算符
if a==b and item in L:
    print("a 等于 b 同时 %d 在 %s 中" %(item, str(L)))
else:
    print("a 不等于 b 或者 %d 不在 %s 中" %(item, str(L)))
执行结果:

循环语句

for 语句

Python for循环可以遍历任何序列的项目,如一个列表或者一个字符串。

for循环的语法格式如下:

for iterating_var in sequence:
   statements(s)

流程图:

实例:

In[7]:  
print("循环字符串:")
s = "Python!"
for letter in s:
    print("\t当前字符:" + letter)
    
print("循环序列:")
l = [4,3,2,1,12]
for item in l:
    print("\t当前元素:" + str(item))
执行结果:
可以以通过序列索引来循环:
In[8]:  
fruits = ['apple', 'orange', 'banana']
for i in range(len(fruits)):
    print("第 %d 个水果是 %s" %(i+1, fruits[i]))
执行结果:
注意再循环中对于循环变量的赋值操作不会影响到原始序列的值。但是如果序列里面是是可以修改的对象时,通过循环变量的修改操作会同时修改原序列的中的对应值。
In[9]:  
objs = [{'a':'a1'}, {'a':'a2'}, {'a':'a3'}]
print(objs)
for obj in objs:
    obj=1
    print(obj)
print(objs)
执行结果:
In[10]:  
objs = [{'a':'a1'}, {'a':'a2'}, {'a':'a3'}]
print(objs)
for obj in objs:
    obj['a'] = 'aaa'
    print(obj)
print(objs)
执行结果:

while 语句

Python 编程中 while 语句用于循环执行程序,即在某条件下,循环执行某段程序,以处理需要重复处理的相同任务。其基本形式为:

while 判断条件: 执行语句…… 执行语句可以是单个语句或语句块。判断条件可以是任何表达式,任何非零、或非空(null)的值均为true。

当判断条件假false时,循环结束。

执行流程图如下:

Gif 演示 Python while 语句执行过程

In[11]:  
count = 0
while count < 9:
   print('The count is:' + str(count))
   count = count + 1
 
print("Good bye!")
执行结果:
当当前始终为 true 时,将会无限循环
In[12]:  
s = ''
while s!='bye':
    s = input("Enter a number  :")
    print("You entered: " + s)
print("Bye Bye!")
执行结果:

break、continue、pass 语句

再循环中常常会遇到提前结束整个循环或提前结束当前循环操作,这个时候就需要用到 breakcontinue

  • break:结束整个循环,剩余的循环次数不再执行
  • continue:结束本轮循环操作,本轮循环后面的语句不再执行,但是剩余的循环次数将继续执行
  • pass:空语句,一个占位符,表示这里什么都每一偶
In[13]:  
l = [1,2,3,4,5,6]

print("正常输出:")
for i in l:
    print("i = %d" % i)
    
print("break 输出:")
for i in l:
    
    if(i==3):
        break  # 这里将结束 i=3 以后的所有输出
        
    print("i = %d" % i)

print("break 输出:")
for i in l:
    
    if(i==3):
        continue  # 这里将跳过 i=3 的输出
        
    print("i = %d" % i)
执行结果:

语句嵌套

从上面的实例可以看到,在 for 语句里面包含了 if 语句,其实任务语句都可以嵌套使用,语句嵌套使我们可以处理复杂的逻辑和流程。下面通过一个例子说明。

?输出常见的加法口诀表

In[14]:  
for i in range(10):
    for j in range(1, i+1):
        print('%d+%d=%d' %(j,i,i+j), end='\t')
    print()
执行结果:
In[15]:  
for i in range(10):
    for j in range(1, 10):
        if(j>i):
            break
        print('%d+%d=%d' %(j,i,i+j), end='\t')
    print()
执行结果:

解析式语句

解析式语句可以使我们更容易处理列表数据,它的所有能力都可以使用循环语句实现,可以看做循环语句的简略形式。解析式可以任何支持迭代操作的数据结构,包括:列表、元组、自定义支持迭代类型

看一下例子: > 将 L 列表中,所有数据都加上 20

In[16]:  
L = [1,2,3,4,5,6,7,8,9,10]

# 循环实现
L1=[]
for item in L:
    L1.append(item+20)
print("循环实现\t\t",end='');print(L1)

# 解析式实现
L2=[ item+20 for item in L]
print("解析式实现\t",end='');print(L2)
执行结果:

可以在解析式里面做数据过滤

找出 L 中所有的偶数

In[17]:  
L = [1,2,3,4,5,6,7,8,9,10]

# 循环实现
L1=[]
for item in L:
    if item % 2==0:
        L1.append(item)
print("循环实现\t\t",end='');print(L1)

# 解析式实现
L2=[ item for item in L if item % 2==0]
print("解析式实现\t",end='');print(L2)
执行结果:
也可以在解析式里面同时处理多个列表,使其产生多个列表元素组合效果
In[18]:  
L1 = [1,2,3]
L2 = [3,4,5]

print([(x,y) for x in L1 for y in L2])
print([(x,y) for x in L1 for y in L2 if x==y])
执行结果:
当然解析式也是可以嵌套使用
In[19]:  
L = [1,2,3,4,5,6]
print([x+1 for x in [x*2 for x in L]])
执行结果:
使用解析式生成其他数据结构,但是要确保生成的数据结构本省具有可变性,这样就导致元组是不能用解析式生成的。当使用 (x for x in [1,2,3]) 时,这个其实是 生成表达式 语法,会在下次介绍。
In[1]:  
L3 = [1,2,3]
print([x**2 for x in L3])
print({"i"+str(x):x**2 for x in L3})

print([x**2 for x in (4,5,6)])
print((x**2 for x in (4,5,6)))
执行结果:

试试

?给定三条线段的长度,判断是否能组成三角形,如果能输出三角形:普通三角形、等腰三角形、等边三角形或直角三角形

例如:

a=1; b=2; c=3 输出:不是三角形

a=3; b=4; c=5 输出:直角三角形

a=1; b=1; c=1 输出:等边三角形