Python控制结构

Python控制结构

  • 1.语句和代码块
  • 2.条件表达式
  • 3.分支结构
    • 3.1 单分支结构:if语句
    • 3.2 else 语句
    • 3.3 多分支结构:elif子句
    • 3.4 三元表达式: if/else
  • 4.while 循环语句
  • 5.for 循环语句
  • 6.break, continue和else语句
    • 6.1 break语句
  • 6.2 continue 语句
  • 6.3 else 语句
  • 7.循环的应用
    • 7.1 使用 range 函数遍历
    • 7.2 列表推导式
    • 7.3 并列遍历:zip 函数
    • 7.4 简单循环的替身:map 函数
    • 7.5 序号和元素都需要时应用 enumerate 函数

1.语句和代码块

程序是由语句和表达式构成的。

还有一些语句不仅仅由一行代码构成,例如分支和循环语句,在选择不同的分支或者 循环条件满足的情况下,有时需要执行多行代码。这样的语句称为复合语句

缩进的作用

在 Python 中, 要求使用缩进来标识代码块。 相同层级的代码必须以垂直对齐的方式来组织, 即相同的缩进。

一些代码行可以作为一组,放在“代码块”中可以根据代码行的缩进,知道代码块的开始和结束。代码块有3 条规则。

  1. 缩进增加时,代码块开始。
  2. 代码块可以包含其他代码块。
  3. 缩进减少为零,或减少为外面包围代码块的缩进,代码块就结束了。

Python语言采用严格的“缩进”来表明程序的格式框架。缩进指每一行代码开始前的空白区域,用来表示代码之间的包含和层次关系。

Python 对于缩进的数量没有严格规定,比较常见的是使用 4 个空格或者 1 个制表符。但最好不要在同一段代码中混合使用空格和制表符,这样可能会引起语法错误。

Python 的复合语句首行总是使用冒号:结尾。输入冒号后回车,新的代码行将自动缩进,以便于输入代码块中的语句。

首行语句: 
   内嵌代码块

2.条件表达式

控制语句的开始部分通常是“条件表达式”。分支语句通过条件表达式确定选择执行的代码块;循环语句通过条件表达式决定是否执行循环体中的代码块。通常来说,条件表达式的结果为一个布尔值,即True或者False,例如关系运算或者逻辑运算的表达式。控制语句根据条件是True还是False来决定做什么。

当表达式的最终值是下表中的某个值时,会被认作是假值:

对象类型 对象类型
布尔 False null类型 None
整型 0 浮点型 0.0
空字符串 ‘’ 空列表 []
空元组 () 空字典 {}
空集合 set()

除了上表所列出来的值,其他的值都会被认作是真值。


3.分支结构

分支结构是程序根据条件判断结果而选择不同向前执行路径的一种运行方式,包括单分支结构和二分支结构。由二分支结构会组合形成多分支结构。

Python控制结构_第1张图片

3.1 单分支结构:if语句

单分支结构的条件为真值True时,执行代码块,然后执行后续代码;而条件为假值False时,跳过代码块,继续执行后续代码。

单分支结构的语法如下所示:

if condition:
    statements

代码实例:

age = input(请输入你的年龄:)
if age < 0:
    print('输入有误,请检查输入。')

3.2 else 语句

if子句后面有时候也可以跟着else语句。只有if语句的条件为False时,else子句才会执行。在英语中,else语句读起来可能是:“如果条件为真,执行这段代码。否则,执行那段代码”。else语句不包含条件,在代码中,else语句中包含下面部分:

if condition:
    statements1
else:
    statements2

代码实例:

ID = input(请输入身份证号码:)
if int(ID[-2]) % 2:
    print('男')
else:
	print('女')

3.3 多分支结构:elif子句

虽然只有ifelse子句会被执行,但有时候可能你希望,“许多”可能的子句中有一个被执行。elif语句是“否则如果”,总是跟在if或另一条elif语句后面。它提供了另一个条件,仅在前面的条件为False时才检查该条件。在代码中,elif语句总是包含以下部分:

if condition1:
    statements1
elif condition2:
    statements2
else:
    statements3

代码实例:

ID = input(请输入身份证号码:)
if len(ID) != 18:
	print('身份证号错误。')
elif int(ID[-2]) % 2:
    print('男')
else:
	print('女')

3.4 三元表达式: if/else

Python中的三元表达式可以将if-else语句放到一行里。语法如下:

True_expression if condition else False_expression

真值表达式或假值表达式可以是任何Python代码。它和下面的代码效果相同:

if condition:
    a = True_expression 
else:
    a = False_expression

代码实例:

ID = input(请输入身份证号码:)
gender = '男' if int(ID[-2]) % 2 else '女'
print(gender)

4.while 循环语句

Python 中有 whilefor 两种循环结构,利用循环语句,可以让一个代码块一遍又一遍的执行。

对于while循环,只要while语句的条件为Truewhile子句中的代码就会执行。Python当中,while实现循环的方法如下:

while condition:
    statements

while语句看起来和if语句类似。不同之处是它们的行为。if子句结束时,程序继续执行if语句之后的语句。但在while子句结束时,程序执行跳回到while语句开始处。while子句常被称为“while 循环”,或就是“循环”。

代码实例:

count = 0
while count < 10:
    print(f'{count}的平方为{count ** 2}')

5.for 循环语句

通常,for循环用于遍历序列(字符 串、列表和元组等)或任何可迭代对象内的元素,是一个通用的迭代器。for循环的一般形式是:

for item in iterable_obj:
    statements

如:

num_list = [5, 4, 6, 8, 34, 17]
sum_value = 0
for num in num_list:
    sum_value += num
print(f'数字总和为{sum_value}')

在Python中,变量可以通过多重赋值的方式进行赋值,这种方式同样可以用在for循环的遍历中:

num_list = [[5, 4], [6, 8], [34, 17]]
value = 0
for num1, num2 in num_list:
    value += num1
    value -= num2
print(value)

使用range函数遍历

有一种遍历方式是利用序号(偏移量),此时需要将包含列表序号的可迭代对象放在for循环首行的in关键字后面,通常利用range函数来实现。
range函数会得到一个按需产生整数元素的可迭代对象,其语法结构有两种形式:

range(stop)
range(start, stop, [step])

代码实例:

for num in range(0,10):
	print(f'{num}的平方为{num ** 2}')

6.break, continue和else语句

6.1 break语句

break用来跳出最内层forwhile循环,脱离该循环后程序从循环后代码继续续执行。

s = 'Python'
for c in s:
	if c == 'o':
		print(f'在{s}中找到o了。')
        break
else:
    print(f'{s}中没有字母o了。')

每个break语句只有能力跳出当前层次循环。

s = 'Python'
for c in s:
	for i in range(10):
		print(c, end='')
		if c == 'o':
		break

6.2 continue 语句

break语句一样,continue语句用于循环内部。如果程序执行遇到continue语句,就会马上跳回到循环开始处,重新对循环条件求值(这也是执行到达循环末尾时发生的事情)。

试试下面的用户验证:

while True:
    print('请输入用户名:')
    name = input()
    if name != '小嗷犬':
    	print('用户不存在')
        continue
    print('你好, 小嗷犬!')
    password = input('请输入密码:')
    if password == '123456':
        break
print('登录成功')

6.3 else 语句

在有些场景中,需要根据循环结束的原因(正常结束还是因为执行break而结束)来作出不同的操作。在其它程序设计语言中,通常使用一个标记变量来实现。在Python的循环,加入了else子句,使得程序编写更加方便:

# 找出50以内的素数
result = [] 
for i in range(2,51):
    for j in range(2, i):
        if i % j == 0:
            break
    else:
        result.append(i) 
print(result)

7.循环的应用

7.1 使用 range 函数遍历

range 函数会得到一个按需产生整数元素的可迭代对象,其语法结构有两种形式:

range(stop)
range(start, stop, [step])

代码实例:

for num in range(0,10):
	print(f'{num}的平方为{num ** 2}')

7.2 列表推导式

推导式是从可迭代对象中快速简洁地创建数据类型的一种方法。它使得你用优美简短的代码就能实现循环甚至条件判断。

利用推导式可以得到列表、字典、集合以及生成器。列表推导式会产生一个新的列表,其语法形式如下所示:

[expr for item in iterable_obj]

用户输入或者从文件读取的数据通常都是字符串类型, 如果需要进行数学运算,需要将字符串转换为数字类型后再运算。编写程序,将输入的销售数量进行累加。
代码实例:

amt_str = input('请输入销售数量(用逗号隔开):') 
amt_str_list = amt_str.split(',') 
amt_int_list = [int(amt) for amt in amt_str_list] 
print('总销售数量为:{}件'.format(sum(amt_int_list)))

列表推导式也可以加上 if 关键字, 对原可迭代对象中的元素进行判断, 符合条件的元素在使用 expr 表达式运算后加入新列表中:

[expr for item in iterable_obj if condition]

在代码实例中,为了防止输入的销售数量是负数,可以对代码进行以下改造:

amt_str = input('请输入销售数量(用逗号隔开):') 
amt_str_list = amt_str.split(',') 
amt_int_list = [int(amt) for amt in amt_str_list if '-' not in amt] 
print('总销售数量为:{}件 '.format(sum(amt_int_list)))

7.3 并列遍历:zip 函数

Python 中提供了一个非常有用的函数:zip 函数。 这个函数可以将这些序列并排的元素配对成元组后,组成一个新的可迭代对象。其语法格式如下:

zip(*iterables)

代码实例:

stock_code = ('600000', '600036', '600048', '000001') 
stock_name = ('浦发银行', '招商银行', '保利地产', '平安银行') 
close_price = [11.54, 36.84, 16.61, 14.49] 
for item in zip(stock_code, stock_name, close_price):
    print('{1} 的代码是:{0},收盘价:{2:.2f} 元'.format(item[0], item[1], item[2]))

7.4 简单循环的替身:map 函数

在 Python 中,可以利用 map 函数简化这类代码。其语法格式如下:

map(func, *iterables)

map 函数有两个参数,func 是一个函数, 也就是对序列中元素进行的操作。

代码实例:

amt_str = input(' 请输入销售数量 ( 用逗号隔开 ):') 
amt_str_list = amt_str.split(',') 
amt_int_map_obj = map(int, amt_str_list) 
print(' 总销售数量为:{} 件 '.format(sum(amt_int_map_obj)))

7.5 序号和元素都需要时应用 enumerate 函数

在 Python 中,通过 enumerate 函数可以将代码写得更加简洁。

enumerate 函数的语法格式如下:

enumerate(iterable, start=0)

代码实例:

goods_list = [['华为笔记本', 1000], ['联想笔记本', 800], ['苹果笔记本', 600]] 
for idx, goods in enumerate(goods_list):
    print('第{}名{}销量:{}台'.format(idx + 1, goods[0], goods[1]))

你可能感兴趣的:(Python基础入门,python)