03 《Python编程 从零基础到项目实战》- 基础篇 2


第三章 条件分支与循环

3.1 if条件分支

  1. 单分支判断
**格式:**
if boolean_value1:
	子代码模块1

**判断条件:**
	boolean_value1为if语句判断条件,以布尔值的形式判断if语句是否执行子代码模块1。
当boolean_value1值为True时,则执行子代码模块1;当值为False时,则不执行。

说明:
第一行的 “ : ” 不能省略,而且必须是半角。
注意缩进格式(TAB键,或四个空格)

  1. 双分支判断
**格式:**
if boolean_value1:
	子代码模块1
else:
	子代码模块2
  1. 多条件多分支判断
**格式:**
if boolean_value1:
	子代码模块1
elif boolean_value2:
	子代码模块2
else:
	子代码模块3

说明:
① if语句里可以嵌套if语句。
② if语句条件里用到了数学运算符、比较运算符、逻辑运算符,而且不同运算符可以组成综合条件判断表达式。

3.2 while循环

**while循环的基本语法格式:**
while boolean_value1:
	子代码模块1

boolean_value1为while语句的循环判断条件。
当其值为True时,继续执行子代码模块1;当为False时,终止执行。
while循环可嵌套使用。

定义:线性查找(Linear Search),又称顺序查找,是最简单的查找方法。它的基本思想是从第一个记录开始,逐个比较记录的关键字,直到给定的K值相等,则查找成功;若比较结果与文件中N个记录的关键字不等,则查找失败。

3.3 for循环语句

**格式:**
for <variable> in <sequence>:
	子代码模块1
else:
	子代码模块2

**说明:**
variable接收sequence集合中获取的成员元素,循环一次接收一次。sequence为集合对象,包括数字序列、字符串、列表、元组、字典等。

说明:
在实际编程中,while、for循环后的再直接跟else子句,用的相对比较少。因为不用else子句,while循环结束后,同样可以执行后续程序代码。

  1. 利用自定义集合对象实现for循环
>>> fish_record='鲫鱼5条、鲤鱼8条、鲢鱼7条、草鱼2条、黑鱼6条、乌龟1只'
>>> i=0
>>> for var in fish_record:
>>> 	if var=='条':
>>> 		i+=1
>>> 		print(i)
执行结果如下:
> 1
> 2
> 3
> 4
> 5
  1. 利用内建范围函数range实现for循环
>>> for i in range(9):
>>> 	if i%2==0:
>>>			print('%d是偶数'%(i))
执行结果如下:
> 0是偶数
> 2是偶数
> 4是偶数
> 6是偶数
> 8是偶数
  1. range函数另一种写法
格式为range(start,stop[,step])
start代表数字的开始值,stop代表数字的结束值,
step代表循环时数字递增的步长(默认值为1,无需设置)。

>>> for i in range(1,5,2):
>>> 	print(i)

执行结果如下:
> 1
> 3

3.4 循环控制语句

1. break语句
当while或for循环过程所产生的操作已经满足业务要求时,可以通过break语句立刻终止并跳出循环语句。
避免过度循环次数的发生,以提高处理效率。

2. continue语句
continue语句使循环回到开始处,继续循环,而忽略 continue语句后的代码行。

3.5 复杂条件处理

  1. 成员运算符
运算符运算符规则描述
in如果在指定的序列中有找到值,则返回True,否则返回False
not in如果在指定的序列中没有找到值,则返回True,否则返回False

具有集合概念的对象有:数字序列、字符串、列表、元组、字典。

注意:成员运算符in和for … in语句里的in的区别?
① 两者不是同一种符号,后者是for循环的固定语法组成成员;前者是独立集合判断运算符号;
② for中in返回的是集合中的一个个元素;成员运算符返回的是逻辑值结果(True和False)。

  1. 身份运算符
    通过身份运算符可以判断两个标识符(对象名)是否引用自一个对象。若在内存中,不同对象名指向的内存地址为同一个地址,那么它们是引用自一个对象。
运算符运算规则描述
isis是判断两个标识符是否引用自同一个对象。如果是,则返回True,否则返回False
not isnot is是判断两个标识符是不是引用自不同一个对象。如果是不同对象,则返回True,否则返回False
**示例:**
>>> t1=['abc','hello']
>>> t2=[]
>>> t2.copy()
>>> print(id(t1))
>>> print(id(t2))
>>> print(t1 is t2)

**运行结果:**
> 2833095847040
> 2833085562560
> False
  1. 运算符优先级
优先级顺序运算符运算符名称
1**指数
2~、+、-按位翻转,数前的正号、负号
3*、/、%、//乘、除、取模、取整
4+、-加法、减法
5>>、<<右移、左移运算符
6&位与(AND)运算符
7^ |位异或(XOR)位或(OR)运算符
8==、!=、<、>、>=、<=比较运算符
9=、!=、<、>、>=、<=赋值运算符
10is、is not身份运算符
11in、not in成员运算符
12not、or、and逻辑运算符

第4章 列表和元组


4.1 接触列表

  1. 列表的基本知识
    定义1:列表(List),是可变的序列,也是一种可以存储各种数据类型的集合,用中括号([ ]),表示列表的开始和结束,元素之间用逗号( , )分隔。列表中每个元素提供一个对应的下标。
    (1)列表的基本格式表示
>>> []
>>> test1=[]
>>> print(len(test1))
> 0

>>> test2=[1]
>>> print(len(test2))
> 1

>>> test3=[1,2]
>>> print(len(test3))
> 2

(2)列表的不同数据类型元素成员

>>> testn=[1,2,3,4]
>>> len(testn)
> 4

>>> tests=['Tom','John','Jim']
>>> len(tests)
> 3

>>> testx=['鲫鱼',5,8.5,'鲤鱼',8,6,'鲢鱼',7,10.5]
>>> len(testx)
> 9

>>> testx1=[1,2,3,tests]
>>> len(testx1)
> 4
>>> print(testx1)
> [1,2,3,['Tom','John','Jim']]

(3)列表的下标
列表的下标是从0开始,比如:

>>> 列表元素:testx1=[ 1  ,  2  ,  3 ,  ['Tom','John','Jim']]
>>>  下标: 		  [0]  [1]   [2]      	    [3]

(4)列表的基本操作
列表支持对集合元素进行增加、查找、修改、删除、合并操作等。。
这里使用列表的方法,只需要记住用点号(.)把列表名和方法进行连接即可。

方法名称方法功能描述
append在列表尾部增加元素
clear列表清空
copy复制生成另一个列表
count统计指定元素个数
extend两个列表元素合并
index返回指定元素的下标
insert在指定位置插入新元素
pop删除并返回指定下标对应的元素
remove删除列表中指定元素
reverse反转列表元素顺序
sort对列表元素进行排序

若想知道某一列表的用处,则可以用以下方法获得帮助。

>>> help(list1.append)		# 按Enter键,显示英文帮助
  1. 列表元素增加
    (1)append( ),在列表尾部新增元素。
    (2)insert( ),可以在任何指定位置增加元素。
**append()方法:**
>>> fruits=['apple',5,'peach',2,'watermelon',15.5]
>>> fruits.append('pear')
>>> fruits.append(3.2)
>>> print(fruits)
> ['apple',5,'peach',2,'watermelon',15.5,'pear',3.2]

**insert( 下标 , 新增元素值 )方法:**	指定下标新增元素值。
>>> fruits.insert(0,'startfruit')	# 在fruits列表第一个位置插入新元素
>>> fruits.insert(1,6.8)			# 在fruits列表第二个位置插入新元素
>>> print(fruits)
> ['startfruit',6.8,'apple',5,'peach',2,'watermelon',15.5,'pear',3.2]
  1. 列表元素查找
    (1)index()方法查找元素
    index()使用格式为L.index(value[,start[,stop]])
    L代表列表对象;
    value表示需要在列表中查找的元素;
    start表示在列表里开始查找的下标数;(带中括号的为可选参数)
    stop表示代表查找结束的下标数;(带中括号的为可选参数)
    若查到元素,则返回第一个找到的元素;若没有找到,则返回 “ ValueError … ” 出错信息。
>>> list1=['Tom',1,2.3,1]
>>> print(list1.index('Tom'))			# 在列表里查找'Tom'
> 0										# Tom在列表list1里的下标是0
>>> print(list1.index(1))				# 在列表里查找1
> 1										# Tom在列表list1里的下标是1
>>> print(list1.index(1,2))				# 从下标2开始,在列表里查找1
> 3										# Tom在列表list1里的下标是0
>>> print(list1.index('a'))				# 在列表里查找'a'
> Traceback (most recent call last):
> 		File "<pyshell#11>",line 1, in <module>
> 			list1.index('a')
> ValueError:'a' is not in list

(2)in成员运算判断

>>> list1=['Tom',1,2.3,1]
>>> print('a' in list1)
> False

(3)用下标读取对应元素

>>> list1=['Tom',1,2.3,1]
>>> print(list1[2])
> 2.3

(4)切片读取

>>> list1=['Tom',1,2.3,1]
>>> print(list1[1:])
> [1,2.3,1]
  1. 列表元素修改
    列表通过指定下标,对对应的元素进行赋值修改
>>> list1=['Tom',1,2.3,1]
>>> list1[3]=2
>>> print(list1)
> ['Tom',1,2.3,2]

与字符串相比,列表元素具有可修改特点,使其具有了更大的操作灵活性。

>>> list1=['Tom',1,2.3,2]
>>> list1[3]='元'
>>> print(list1)
> ['Tom',1,2.3,'元']
  1. 列表元素删除
    (1)clear()方法
>>> listColor=['red',1,'green',2,'yellow',3]
>>> print(len(listColor))
> 6

>>> listColor.clear()
>>> print(listColor)
> []
>>> print(len(listColor))
> 0

(2)pop()方法
pop()方法使用格式L.pop([index])。其中,L代表列表对象,index为可选参数,当指定该参数时,在指定参数下标处 弹出对应元素并删除该元素;当不指定该参数时,pop()方法默认从列表尾部弹出并删除一个元素。

>>> listpop=['球1','球2','球3']

>>> get_one=listpop.pop()				# pop()默认列表尾部操作
>>> print(get_one,' ',listpop)			# 打印弹出元素和删除后的列表元素
>3 ['球1','球2']					# 弹出“球3”,列表里删除了“球3”

>>> get_one=listpop.pop(0)				# 弹出并删除第一个元素
>>> print(get_one,' ',listpop)			# 打印弹出元素和删除元素后的列表元素
>1 ['球2']

>>> listpop.pop(2)						# 在listpop里,试图弹出不存在的元素
> Traceback (most recent call last):
> 	File "<pyshell#14>", line 1,in <module>
> 		listpop.pop(2)
> IndexError:pop index out of range

(3)remove()方法
remove()方法使用格式为L.remove(value)。其中,L代表列表对象,value为需要删除的元素。当需要的列表元素具有多个时,一次只能删除左边第一个。

>>> listpop=['球1','球2','球3','球2']
>>> listpop.remove('球2')
>>> print(listpop)
> ['球1','球3','球2']

若删除元素在列表中不存在,则返回英文报错信息。

(4)del()函数
del()函数可删除列表中指定元素,也可以删除整个列表对象。

>>> listpop=['球1','球2','球3','球2']
>>> del(listpop[2])
>>> print(listpop)
> ['球1','球2','球2']

>>> del(listpop)
>>> print(listpop)
> Traceback (most recent call last):
> 	File "<pyshell#38>", line 1,in <module>
> Listpop
> NameError:name 'listpop' is not defined
  1. 列表元素合并
    (1)extend()方法:两个列表合并
>>> team1=['张三','李四','王五']
>>> team2=['Tom','Jack','John']
>>> team1.extend(team2)		# 把列表team2合并到列表team1中
>>> print(team1)
> ['张三','李四','王五','Tom','Jack','John']

(2)采用 “ + ” 合并

>>> team1=['张三','李四','王五']
>>> team2=['Tom','Jack','John']
>>> id(team1)
> 59187648

>>> team1=team1+team2
>>> id(team1)
> 59074840

>>> print(team1)
> ['张三','李四','王五','Tom','Jack','John']

说明:
① 采用 “ + ” 合并,并直接赋值给team1的方法,会导致team1在内存中的地址号的改变,这说明team1合并后被重新定义了,不是合并前的列表对象了。
② 采用extend()方法,不会导致team1对象内存地址号的变化。
但是这两种方法都导致了team1元素个数的变化。

  1. 列表元素排序
    定义2:排序(Sort),按照次序分增序和减序(又叫升序、降序);增序一般根据ASCII码由小到大对字符、数学等进行排序;降序一般根据ASCII码由大到小对字符、数学等进行排序。

    sort()方法使用格式为L.sort(key=None, reverse=False)。其中L为列表对象;key为可选参数,用于指定在作比较之前,调用何种函数对列表元素进行处理,如key=str.lower(lower为大写字母转为小写字母的函数),代表把所有的大写字母转换成小写;reverse为可选参数,默认情况下,sort()方法为增序排序,若reverse=True,则为减序。
>>> fruit=['banana','pear','apple','peach']
>>> fruit_l=fruit.copy()
>>> fruit_l.sort()
>>> print(fruit_l)
> ['apple','banana','peach','pear']

>>> fruit_h=fruit.copy()
>>> fruit_h.sort(reverse=True)
>>> print(fruit_h)
> ['pear','peach','banana','apple']

通过key参数影响sort()排序规则
>>> listA=['Tom','tim','john','Jack']
>>> listA1=listA.copy()
>>> listA1.sort()
>>> print(listA1)
> ['Jack','Tom','john','tim']

>>> listB=listA.copy()
>>> listB.sort(key=str.lower)
>>> print(listB)
> ['Jack','john','tim','Tom']
  1. 列表其他操作方法
    (1)copy()方法
    copy()方法使用格式为L.copy()。其中,L代表列表对象,通过copy()方法实现L列表对象在内存中的复制,形成新的对象。
>>> vegetable=['白菜','萝卜','青菜','芹菜','花菜','白菜']
>>> id(vegetable)
> 42718272
>>> new_vege=vegetable.copy()
>>> id(new_vege)
> 42718112
>>> same_list=vegetable
>>> id(same_list)
> 42718272

说明:
copy()复制了数据和引用。
= 普通赋值,增加了引用。

(2)count()方法

>>> vegetable=['白菜','萝卜','青菜','芹菜','花菜','白菜']
>>> vegetable.count('白菜')			# 统计白菜数量
> 2	

(3)reverse()方法
列表反向操作前后,列表的地址不变,通过id()确认。

>>> l_to_m=[9,8,7,6,5,4,3,2,1]
>>> print(l_to_m)
> [9,8,7,6,5,4,3,2,1]

>>> l_to_m.reverse()
>>> print(l_to_m)
> [1,2,3,4,5,6,7,8,9]
>>> fruit=['banana','pear','apple','peach']
>>> fruit.reverse()
>>> print(l_to_m)
> ['peach','apple','pear','banana']

(4)列表解析
基于列表本身的元素操作语句的解析。

>>> [expression for iter_val in iterable]
>>> [expression for iter_val in iterable if cond_expr]

说明: expression为基于元素的运算表达式;iter_val为从列表iterable迭代的获取的元素i ;if子句判断元素,cond_expr为判断元素的表达式。

示例: 对集合0 … 10中,除0外,其他元素做平方运算

>>> Nums=[i**2 for i in range(11) if i>0]
>>> print(Nums)
> [1,4,9,16,25,36,49,64,81,100]

4.3 元组

元组(Tuple) 类似于列表,与列表的主要区别有以下两点。
(1)元组不能对其元素进行变动,而列表允许。
(2)元素用小括号表示【 ( ) 】,元组用中括号表示【 [ ] 】。

定义5:元组(tuple)是不可变序列,也是一种可以存储各种数据类型的集合,用小括号【 ( ) 】表示元组的开始和结束,元素之间用( , )分隔。
这里的不可变包括不能对元组对象进行增加元素、变换元素位置、修改元素、删除元素操作。

  1. 元组的基本定义及使用
元组基本定义及使用:
>>> ()
>>> test1=()
>>> print(len(test1))
> 0

多数据类型、多元素、重复元素元组对象定义:
>>> test2=(1,2,2,'1','a')

一个元素元组的定义及使用
>>> test3=(1)
>>> print(type(test3))
> <type 'int'>
>>> test3=('OK',)
> <type 'tuple'>

省略小括号的元组定义及使用
>>> name,age='tom',19
>>> print(name,age)
> ('tom',19)

>>> test4=('jack',10)
>>> name1,age1=test4
>>> print(name1)
> jack
>>> print(age1)
> 10
  1. 元组的基本操作
    元组操作基本方法:
方法名称方法功能及描述
count指定元素个数
index返回元素下标

元组操作相关内置函数:

函数名称函数功能描述
len统计元组元素个数
max返回元组中最大值的元素
min返回元组中最小值的元素
tuple将列表转换为元组
type返回对象类型
del删除整个元组对象
sum对元组对象的所有元素求和

(1)建立元组c

>>> select_nums=(1,2,3,4,5)
>>> select_Names=('中国','美国','英国','法国','俄罗斯')
>>> select_mix=('中国',1,'美国',2,'英国',3,'法国',4,'俄罗斯',5)
>>> select_nested=('排名',select_nums)
>>> print(select_nested)
> ('排名',(1,2,3,4,5))
>>> list1=['OK']
>>> select_nested1=('排名',select_nums,list1)
>>> print(select_nested1)
> ('排名',(1,2,3,4,5),['OK'])

>>> id(select_Names)
> 42460528
>>> select_Names=select_Names+('日本',)
>>> id(select_Names)
> 43001872
>>>print(select_Names)
> ('中国','美国','英国','法国','俄罗斯','日本')

元组不支持对元素进行修改和增加,若需要增加元素,则可以采用重新定义元组对象的方法来实现。

(2)查找元素

查找元组中的元素,主要通过元组下标来实现
>>> select_Names[0]
> '中国'
>>> select_Names[:3]
> ('中国','美国','英国')

循环查找
>>> for get_name in select_Names:
>>> 	if get_names=='法国':
>>> 		print('法国的下标是%d'%select_Names.index('法国'))
>>> 		break
> 法国的下标是3

(3)删除元组

通过del()函数,删除整个元组
>>> test1=(3,'TOme',[])
>>> del(test1)
>>> id(test1)
> Traceback (most recent call last):
> 	File "<pyshell#28>",line 1,in <module>
> 		id(test1)
>  NameError:name 'test1' is not defined

(4)统计元组

1. 通过count()方法直接统计
>>> nums=(1,5,7,5,0,3,5)
>>> nums.count(5)					# 统计值为5的元素
> 3

2. 通过len()函数统计
>>> print(len(nums))				# 统计元组对象的元素个数
> 7

3. 统计元组所有元素的累计和
>>> nums=(1,5,7,5,0,3,5)
>>> sum1=0
>>> for add in nums:
>>> 	sum1=sum1+add
>>> print('元组和为:%d'%(sum1))
> 元组和为:26

4. 利用sum函数直接对元组求和
>>> nums=(1,5,7,5,0,3,5)
>>> print(sum(nums))
> 26

(5)合并元组

>>> t1=(1,2,3)
>>> t2=(4,5,6)
>>> t3=t1+t2
>>> print(t3)
> (1,2,3,4,5,6)

(6)转换元组

列表转换为元组:
>>> list1=['Tom','John','Tim']
>>> l_to_t=tuple(list1)
>>> print(type(l_to_t))
> <class 'tuple'>

元组转换为列表:
>>> t_to_l=list(l_to_t)
>>> print(type(t_to_l))
> <class 'list'>
>>> print(t_to_l)
> ['Tom','John','Tim']

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值