程序控制,函数代码复用,组合数据类型

程序的控制结构

程序的三种控制结构

顺序结构,分支结构,循环结构

顺序结构:没什么好说的,从头走到尾的那种

分支结构:
if语句控制,true和false各占一种情况的那种
型如:
a = 200
if a > 100:
print("Ok 200")
elif a > 100:
print("Ok 100")
else:
print("False!")

循环结构
while 循环,写法如:
a = -10
while a > 0:
a+=1

for 循环,应用范围较广,写法如:
for i in range(10):
print(i,end=" ")
print("OK")

程序的分支结构

单分支结构
if a > 10:
print(a)
二分支结构
if a > 10:
print(a)
else:
print('No')
多分支结构
if a > 10:
print(a)
elif a > 5:
print('a>5')
else:
print("No")

程序的循环结构

遍历循环
a = ['I','like','Study']
# 遍历数组
for i in a:
print(a)

条件循环
num = 0
while num < 5:
print(num,end=" ")

无限循环
num = 0
while True:
num += 1
print("我是无限循环第",num,"次!",sep="")

breakcontinue循环控制。
break 强制退出循环
continue 跳过当前循环

程序的异常处理

try:
# 主代码块
pass
except KeyError,e:
# 异常时,执行该块
pass
else:
# 主代码块执行完,执行该块
pass
finally:
# 无论异常与否,最终执行该块
pass

函数和代码复用

函数的定义和使用

# 1. def定义函数:
# 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()
# 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数,
# return[表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。

# 2.函数的参数
# 默认参数:使用默认参数的时候,如果给形参传递了实参,则形参会接收实参的值。如果没有给这个形参传递实参,则形参会采用默认值。
# 位置参数:实参和形参的数量上必须要保持一致。
# 关键字参数:通过定义关键字获取实参的值,与形参的顺序无关。
# 可变参数:形参的数据会根据实参的数量的变化而变化。

# 简单的定义一个函数
def fun(num=3,e=45): # 传入参数num,没参数则num默认为3
num += 100 # 对传入的参数进行处理
return num+e # 调用return将新的值返回


# 调用函数,传入参数20
# 传入参数的方式为名称传递
# e为可选参数
a = fun(num=20)
# 使用print函数输出函数的返回值
print(a)

变量的作用域

局部变量和全局变量

# 全局变量,全局下可以调用
num = 10

def fun(num):
# 这里的num为局部变量,也就是局部的改变不会影响到全局
# 如果num使用global声明为全局变量,则num的改变会影响到全局变量的num
num += 100
print(num)

# 调用函数并且传入参数
fun(num)

函数递归的定义和使用

递归函数挺简单,也挺麻烦的。

# 功能:传入一个参数num,计算从1累加到num的和
def fun(num):
if(num>=1):
return fun(num-1) + num
else:
return 0

# 输出最终结果
print(fun(10)) # 输出结果为:55
print(fun(3)) # 输出结果为:6

# 递归函数使用内存分析法理解较为简单,用来解决问题对我来说难度有点大了
# 此处仅是复习,详细细节不赘述,有机会再补充。

组合数据类型

数组类型

创建、索引、切片

简单罗列下吧

创建
a = [] # 生成空白列表
a = [1,2,3,"sec"] # 生成带元素的列表
a = list() # 生成空白列表
a = list(range(start,end [,step])) # 利用list+range生成
a = [ i for i in range(1,20)] # 列表推导式

索引
a[index] # index表示下标值,通过下标获取元素
a.index(x[,start[,end]]) # 在列表a当中,从start开始到end结束寻找x元素的下标值。

切片
a[start:end:step] # 从start开始到end结束,截取步长为step的列表元素

举个例子
>>> [1,2,3,4,5,6,7,8][1:3:1]
[2,3]
>>> [1,2,3,4,5,6,7,8][1:5:2]
[2,4]
>>> [1,2,3,4,5,6,7,8][::-1]
[8, 7, 6, 5, 4, 3, 2, 1]

相关操作方法

list.append(obj)        # 在列表末尾添加新的对象
list.extend(seq) # 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
list.insert(index,obj) # 将对象插入列表
list.pop([index=-1]) # 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
list.remove(obj) # 移除列表中某个值的第一个匹配项
list.reverse() # 反向列表中元素
list.sort(cmp=None,key=None, reverse=False)
# 对原列表进行排序
reverse 用于指定排序是否为降序,默认为 False 即升序排序。
key 用于指定排序的关键字函数,该函数接受一个列表中的元素,返回用于排序的关键字。默认为 None,表示以元素本身作为排序依据。
比如:key=len
cmp 用于指定排序时的比较函数,该函数接受两个参数,如果第一个参数小于第二个参数,则返回负数,如果两个参数相等,则返回零,如果第一个参数大于第二个参数,则返回正数。默认为 None,表示使用 Python 内置的比较函数进行排序。
list.count(obj) # 统计某个元素在列表中出现的次数
list.clear() #清除所有的元素


实例

a = ['Hello','I','am','Github']
a.append(12) # 尾部新增
print(a)
a.extend([1,2,3,3,4,3,5,2]) # 尾部追加
print(a)
a.insert(1,'????') # 指定索引位置插入
print(a)
a.pop(0) # 删除指定位置元素
print(a)
a.remove(3) # 删除指定元素3的所有情况的头一个
print(a)
a.reverse() # 列表排序颠倒
print(a)
print(a.count(3)) # 计算指定元素的个数
# ---CMD输出--- #
['Hello', 'I', 'am', 'Github', 12]
['Hello', 'I', 'am', 'Github', 12, 1, 2, 3, 3, 4, 3, 5, 2]
['Hello', '????', 'I', 'am', 'Github', 12, 1, 2, 3, 3, 4, 3, 5, 2]
['????', 'I', 'am', 'Github', 12, 1, 2, 3, 3, 4, 3, 5, 2]
['????', 'I', 'am', 'Github', 12, 1, 2, 3, 4, 3, 5, 2]
[2, 5, 3, 4, 3, 2, 1, 12, 'Github', 'am', 'I', '????']
2
# ---sort--- #
>>> b
[1, 2, 3, 4, 5, 6, 7, 8]
>>> b.sort(reverse=True)
>>> b
[8, 7, 6, 5, 4, 3, 2, 1]
>>> b.sort(reverse=False)
>>> b
[1, 2, 3, 4, 5, 6, 7, 8]

集合类型

集合(Set)是一种无序、可变的容器,其中的元素不允许重复。可以使用大括号 {} 或 set() 函数来创建

创建

# 创建一个空集合
empty_set = set()
print(empty_set) # set()

# 通过大括号创建集合
set1 = {1, 2, 3}
print(set1) # {1, 2, 3}

# 通过set()函数创建集合
set2 = set([1, 2, 3, 3])
print(set2) # {1, 2, 3}

# 通过set()函数创建集合(使用字符串)
set3 = set('hello')
print(set3) # {'e', 'h', 'o', 'l'}

操作符、操作函数和操作方法

set():             # 创建一个空集合或从可迭代对象创建一个集合。
len(): # 返回集合的元素数量。
add(): # 向集合添加元素,如果元素已经存在则不进行任何操作。
clear(): # 清空集合中的所有元素。
pop(): # 随机删除并返回集合中的一个元素,如果集合为空则抛出KeyError异常。
symmetric_difference(): # 返回两个集合的对称差集。
difference(): # 返回两个集合的差集。
union(): # 返回两个集合的并集。
update(): # 向集合添加多个元素,参数可以是集合或可迭代对象。
remove(): # 从集合中删除指定元素,如果元素不存在则会抛出KeyError异常。
discard(): # 从集合中删除指定元素,如果元素不存在则不进行任何操作。
intersection(): # 返回两个集合的交集。
issubset(): # 判断一个集合是否是另一个集合的子集。
issuperset(): # 判断一个集合是否是另一个集合的超集。
copy(): # 返回一个集合的浅拷贝。

字典类型

创建、索引

创建
# 空字典
empty_dict = {}

# 包含元素的字典
# dict = {key:value,key1:value1,...}
my_dict = {'name': 'Alice', 'age': 25, 'gender': 'female'}

索引:
# 获取键对应的值
empty_dict[key]
empty_dict.get(key)

操作符、操作函数、操作方法

操作符:
in ,not in,== # 判断键是否存在/不存在,键值是否相等

if key in empty_dict:
print(empty_dict[key])


操作函数:
len(dict): # 返回字典中键值对的数量。
sorted(dict): # 返回按照键排序的键值对的列表。

操作方法:
dict.clear(): # 清空字典中所有的键值对。
dict.copy(): # 返回字典的浅复制。
dict.fromkeys(seq[, value]): # 创建一个新字典,以seq中的元素为键,值都设置为value(默认为None)。
dict.get(key[, default]): # 返回指定键的值,如果键不存在则返回默认值。
dict.items(): # 返回字典的键值对视图。
dict.keys(): # 返回字典的键视图。
dict.update(dict2): # 将字典dict2的键值对更新到当前字典中,如果键已存在则更新值,否则添加键值对。
dict.values(): # 返回字典的值视图。
dict.pop(key[, default]): # 删除并返回指定键的值,如果键不存在则返回默认值。
dict.popitem(): # 随机弹出字典中的一项,并返回该键值对。
dict.setdefault(key[, default]): # 返回指定键的值,如果键不存在则添加该键值对并返回默认值。

# Python3移除的方法
dict.has_key(key) # 如果键在字典dict里返回true,否则返回false
# 此方法可以使用 “in”来替代

实例

>>> dict = {}
>>> dict
{}
>>> dict['name']='syw'
>>> dict['age']=18
>>> dict['school']='stzyjsxy'
>>> dict
{'name': 'syw', 'age': 18, 'school': 'stzyjsxy'}


>>> dict0 = dict.copy()
>>> dict0
{'name': 'syw', 'age': 18, 'school': 'stzyjsxy'}


>>> dict0 = dict.copy()
>>> dict0
{'name': 'syw', 'age': 18, 'school': 'stzyjsxy'}
>>> dict1.fromkeys(b)
{'key-0': None, 'key-1': None, 'key-2': None, 'key-3': None, 'key-4': None, 'key-5': None}
>>> dict1.fromkeys(b,2)
{'key-0': 2, 'key-1': 2, 'key-2': 2, 'key-3': 2, 'key-4': 2, 'key-5': 2}
>>> dict1.fromkeys(b,[1,2])
{'key-0': [1, 2], 'key-1': [1, 2], 'key-2': [1, 2], 'key-3': [1, 2], 'key-4': [1, 2], 'key-5': [1, 2]}
>>> dict1
{}
>>> dict1 = dict1.fromkeys(b,[1,2])
>>> dict1
{'key-0': [1, 2], 'key-1': [1, 2], 'key-2': [1, 2], 'key-3': [1, 2], 'key-4': [1, 2], 'key-5': [1, 2]}

>>> dict.get('name')
'syw'

>>> dict.items()
dict_items([('name', 'syw'), ('age', 18), ('school', 'stzyjsxy')])

>>> dict.keys()
dict_keys(['name', 'age', 'school'])
>>> dict.values()
dict_values(['syw', 18, 'stzyjsxy'])

>>> dict1
{'key-0': [1, 2], 'key-1': [1, 2], 'key-2': [1, 2], 'key-3': [1, 2], 'key-4': [1, 2], 'key-5': [1, 2]}
>>> dict
{'name': 'syw', 'age': 18, 'school': 'stzyjsxy'}
>>> dict.update(dict1)
>>> dict
{
'name': 'syw', 'age': 18,
'school': 'stzyjsxy',
'key-0': [1, 2],
'key-1': [1, 2],
'key-2': [1, 2],
'key-3': [1, 2],
'key-4': [1, 2],
'key-5': [1, 2]
}


>>> dict
{'name': 'syw', 'age': 18, 'school': 'stzyjsxy', 'key-0': [1, 2], 'key-1': [1, 2], 'key-2': [1, 2], 'key-3': [1, 2], 'key-4': [1, 2], 'key-5': [1, 2]}
>>> dict.pop('key-0')
[1, 2]
>>> dict
{'name': 'syw', 'age': 18, 'school': 'stzyjsxy', 'key-1': [1, 2], 'key-2': [1, 2], 'key-3': [1, 2], 'key-4': [1, 2], 'key-5': [1, 2]}



>>> dict
{'name': 'syw', 'age': 18, 'school': 'stzyjsxy', 'key-1': [1, 2], 'key-2': [1, 2], 'key-3': [1, 2], 'key-4': [1, 2], 'key-5': [1, 2]}
>>> dict.popitem()
('key-5', [1, 2])
>>> dict
{'name': 'syw', 'age': 18, 'school': 'stzyjsxy', 'key-1': [1, 2], 'key-2': [1, 2], 'key-3': [1, 2], 'key-4': [1, 2]}


>>> dict
{'name': 'syw', 'age': 18, 'school': 'stzyjsxy', 'key-1': [1, 2], 'key-2': [1, 2], 'key-3': [1, 2], 'key-4': [1, 2]}
>>> dict.setdefault('class','21WeChat')
'21WeChat'
>>> dict
{'name': 'syw', 'age': 18, 'school': 'stzyjsxy', 'key-1': [1, 2], 'key-2': [1, 2], 'key-3': [1, 2], 'key-4': [1, 2], 'class': '21WeChat'}