第一节 计算思维
人类在认识世界、改造世界过程中表现出三种基本的思维特征:
- 以实验和验证为特征的==实证思维==,以物理学科为代表;例如引力波实验
- 以推理和演绎为特征的**逻辑思维**,以数学学科为代表;例如A->B,B->C,所以A->C
- 以设计和构造为特征的**计算思维**,以计算机学科为代表;例如汉诺塔递归
- ==计算思维的本质(关键特征)==是抽象和自动化,即抽象问题的计算过程,利用计算机自动化求解。
第二节 程序设计方法论
1.自顶向下设计
设计思路: 一个复杂的问题可以分解为若干个简单的问题, 简单的问题还可以进一步的再分解成更简单的问题,直到所有的小问题可以用计算机简单明了的解决。
步骤:
- 将算法表达为一系列小问题;
- 为每个小问题设计接口; 接口可以理解为在调用上一个函数时,将其返回值赋值给下一个函数的实际参数
- 通过将算法表达为接口关联的多个小问 题来细化算法;
- 为每个小问题重复上述过程;
自底向上执行:先运行和测试每一个基本函数,再测试由基础函数组成的整体函数,这样有助于定位错误。
示例如下:
good_into={
101:{"name":"无尽之刃","price":3600},
102:{"name":"饮血剑","price":3200},
103:{"name":"暴风之剑","price":1300},
104:{"name":"负极斗篷","price":720},
105:{"name":"冰霜之锤","price":3200},
106:{"name":"守护天使","price":2800},
}
#下面是第一个基本函数
def n1():
print("欢迎来到武器商店!")
print("请根据以下提示完成交易")
print("以下为武器名称与价格!")
print('-----------------------------------')
for i,j in good_into.items():
print("编号:{} 名称:{} 单价:{}".format(i,j["name"],j["price"]))
print('-----------------------------------')
#下面是第二个基本函数
def n2():
a=input("请玩家输入要购买武器的编号与数量(例如:102 3):")
num=int(a.split(" ")[0])
price=int(a.split(" ")[1])
return num,price
#下面是第三个基本函数
def n3(num,price):
n=good_into[num]["price"]*price
return n
#下面是第四个基本函数
def n4(n):
while True:
money=float(input('请输入{}元用于购买武器:'.format(n)))
if n==money:
print("恭喜您,购买武器成功!")
break
elif n<money:
print("恭喜您,购买武器成功!找回您{}元".format(money-n))
break
else:
print("对不起,购买武器失败!")
print("请您重新输入金额购买!")
#下面是由基本函数构成的整体函数
def main():
#1.输入介绍信息
n1() #n1与n2之间没有联系,所以不用设计接口
#2.获取编号和数量
num,price=n2() #n2与n3之间有联系,所以要有接口,即n2的返回值要赋值给为n3的实际参数
#3.计算出商品总价格
n=n3(num,price) #n3与n4之间有联系,所以要有接口,即n3的返回值要赋值给为n4的实际参数
#4.支付
n4(n)
main()
2.模块化设计
- 通过函数或对象封装将程序划分为模块及模块间的表达
- 具体包括:主程序,子程序和子程序间关系
第三节 python内置函数
python一共有68个内置函数,其中二级会涉及到33个。
abs() | all() | any() | bin() | bool() | chr() |
---|---|---|---|---|---|
complex() | dict() | divmod() | eval() | exec() | float() |
hex() | input() | int() | len() | list() | max() |
min() | oct() | open() | ord() | pow() | print() |
range() | reversed() | round() | set() | sorted() | str() |
sum() | type() |
具体分类如下:
33个内置函数大多数我们前面都学过,只有其他函数,列表排序函数与exec()我们没有过多接触,下面我们来介绍这六个函数:
sum(iterable,start)函数
作用:返回总和,即iterable参数中所有元素和(字典为所有值的和)+start参数的==总和==
- iterable:可迭代对象,可以看为任意组合数据类型,但也只能是组合数据类型
- start:指定相加的参数,默认为0
示例如下:
sum1=sum([1,2,3,4]) #就是求列表中所有元素的和
print(sum1)
sum1=sum([1,2,3,4],5) #就是求列表中所有元素和与5的总和
print(sum1)
# 输出结果
10
15
any(iterable)函数
作用:用于判断可迭代参数(iterable)中所有元素是否全为False,则返回False;有一个为True,则返回True。
- 只有非零(数字零)非空(空的数据类型)表示真
- any()函数的作用等价于or保留字,一真则真,全假则假。
- iterable:可迭代对象,可以看为任意组合数据类型,但也只能是组合数据类型
示例如下:
a=any((1,2,3)) #所有元素均非零,即均表示真
print(a)
b=any([1,0,0]) #只有一个元素非零,即只有一个元素表示真
print(b)
c=any([0,"",{}]) #所有元素要么非空,要么非零;即均表示假
print(c)
# 输出结果
True
True
False
all(iterable)函数
作用:用于判断可迭代参数(iterable)中所有元素是否全为True,则返回True;有一个为False,则返回False。
- 只有非零(数字零)非空(空的数据类型)表示真
- any()函数的作用等价于and保留字,全真则真,一假则假。
- iterable:可迭代对象,可以看为任意组合数据类型,但也只能是组合数据类型
注:all()函数与any()函数作用相似,相当于and保留字与or保留字。
exec()函数
- exec()函数与exal()函数作用相同,都是去掉表达式最外面的引号,并执行剩下语句,但exec()函数无返回值。
- 给exec()函数中的表达式赋值并执行,然后打印赋值变量,就可以得到exec()函数的结果。
示例如下:
exec('a=sum([1,2,3,4])')
print(a)
#输出结果:
10
sorted(iterable, reverse=False)函数
作用:返回一个重新排列的新列表。
- iterable:可迭代对象,可以看为任意组合数据类型(字典按键),但也只能是组合数据类型
- reverse(排序规则):reverse = True 降序 , reverse = False 升序(默认)
示例如下:
ls=[1,2,3,4]
a=sorted(ls,reverse=True)
ls.clear() # 验证sorted()函数返回的是否是一个新列表
print(a)
#输出结果:
[4, 3, 2, 1]
reversed(seq)函数
作用:返回反转的迭代器对象(这个看不懂)
- 可以理解为将参数seq反向排序返回(通过list()函数或for循环才能实现)
- seq:可以是序列(字符串,列表,元组)或range()
a=reversed('154326') #通过reversed()函数反转一个字符串。
print(a) #直接返回反转的迭代器对象。输出就是看不懂的结果。
print(list(a)) #通过list()输出反转字符串
#输出结果:
<reversed object at 0x000001E746207EB8> #这个就是直接返回的反转的迭代器对象
['6', '2', '3', '4', '5', '1']
a=reversed(range(1,10)) #通过reversed()函数反转一个数列
for i in a: #通过for循环输出反转数列
print(i)
#输出结果:
9
8
7
6
5
4
3
2
1