聪明学python【2】+【3】+作业总结
第二次任务
【2】数据 类型+操作
四种数据类型:
int float bool type ……
主要提一些和C语言的差别与联系:
- int 和 float 不严格划分,都可以看成一大类——number
- bool 真(1),假(0)
- Type 相当于类型【C语言曾经的sizeof,但是sizeof返回不直观】,注意:类型也是类型
内置:
-
内置常数
True False None(math库中常量):
pi e tau inf(无穷大)
- 运算符
-
算术:
+,-,*,@,/,//,**,%,-(一元算符),+(一元算符) -
关系:
<,<=,>=,>,==,!= -
赋值:
+=,-=,*=,/=,//=,**=,%= -
逻辑:
and,or,not特别注意:运算符的运作方式会受到运算数据的类型的影响
优先顺序
结合律(从左至右)
浮点数误差:
print(0.1 + 0.1 == 0.2) # True print(0.1 + 0.1 + 0.1 == 0.3) # False! print(0.1 + 0.1 + 0.1) # Why? print((0.1 + 0.1 + 0.1) - 0.3) # 特别小,但不是 0 True False 0.30000000000000004 5.551115123125783e-17
-
逻辑运算
and
or
not
-
type() ininstance()----????
isinstance()比type()更具有稳健性(Robustness)这种做法更加符合
面向对象编程中继承(inheritance)的思想
import numbers def isNumber(x): return isinstance(x, numbers.Number)
# 可以应对任何类型的数字*
【3】变量 函数
变量
-
变量是一个名字,ta指代的是一段数据
-
用 = 赋值
-
新值覆盖旧值
-
数据类型不必相同
-
多变量赋值
-
a = b = c = 2 print(f"a={a}, b={b}, c={c}") a=2, b=2, c=2a, b, c = 1, 2, 6 print(f"a={a}, b={b}, c={c}") a=1, b=2, c=6
-
-
命名规则 ……【避免使用保留字命名】
-
保留字:(python中打印保留字的方法)
keyword.kwlist ['False','None','True','__peg_parser__','and','as','assert','async','await','break','class','continue','def','del','elif','else','except','finally','for','from','global','if','import','in','is', 'lambda','nonlocal','not','or','pass','raise','return','try','while','with','yield']
-
函数
-
函数是一个名字,代表一串代码序列
-
header用于定义函数的名称和参数- 当函数被调用时,参数将会作为变量被提供给函数的
body部分 - 可以提供多个参数(用逗号
,分隔),也可以不提供参数(0 个) header以冒号(:)结尾,代表后面会跟着body部分
- 当函数被调用时,参数将会作为变量被提供给函数的
-
body包含函数执行的语句(statement)-
语句需要缩进(由 Code Style Guide 决定)
-
当语句不再缩进,函数部分结束
-
一般会使用
return语句,来让函数返回其结果,但不是必须的类似于用一个
=来对多个变量赋值,函数的返回结果也可以不止一个(用逗号,分隔) -
我们使用函数名来调用函数
-
函数名后紧跟一对括号
-
括号中是我们设定的参数的值,一个不多,一个不少(这很重要)
-
函数会返回设定的
return语句的值
-
内置函数
- 类型转换
- 数学函数
变量-作用域
-
每个变量都有属于自己的作用范围
-
超出作用范围后,变量不可见
-
函数内的变量具有局部作用域,它只存在于函数内部,与其他函数中的同名变量无关
-
在函数外部定义变量时,变量具有全局作用域,在任何地方都可以使用
我们应该尽量避免使用全局变量,但是在非常少的一些场合你会需要用到它
语句 表达式
-
表达式
- 它本身是值
- 它的计算结果是值
-
语句
-
-
它不能打印
-
但它能执行一些操作
-
返回语句
-
一旦返回,函数立刻结束
-
没有返回语句的时候,函数会返回 None
-
关于作业
【1】最小下标
- input函数用法记错,把要 赋值 的变量(对象)放到()里,与scanf是不一样的,注意!!!
- 循环条件 随题而变,< 和 <=
【2】幸运素数 + 【3】哥德巴赫猜想

-
思路(都一样)
-
素数判断函数封装
-
产生一个素数列表
-
要用的时候,用 in 来判断某个数字是否在里面
-
函数单一出口,单数在循环判断中
t = 0 while(n != 0): if n in list_prime_number: n //= 10 else : t = 1 break #一旦不是,跳出循环 return t
-
- 注意:因为你单一出口,没有break,in会一直遍历判断,超级慢,所以当他不成立时,一定要有break
- 数据处理
-
读取(输入)
-
字符串 转换为 数字列表
-
(哥德巴赫猜想)循环输入 地实现【指定输入结束】
while True: input_number = int(input()) if 0 == input_number:1 #!!!跳出输出 break list_input_numbers.append(input_number)
-
-
【4】矩阵乘法

-
搜索矩阵乘法:
1、当矩阵A的列数(column)等于矩阵B的行数(row)时,A与B可以相乘。
2、矩阵C的行数等于矩阵A的行数,C的列数等于B的列数。
3、乘积C的第m行第n列的元素等于矩阵A的第m行的元素与矩阵B的第n列对应元素乘积之和。
-
思路
- 矩阵初始化
- 矩阵输入
- 矩阵乘法计算
- 要用三重嵌套循环实现
- 结果矩阵行循环
- 结果矩阵列循环
- 结果矩阵元素的乘积(需要用循环两个输入矩阵的和来实现)
- 要用三重嵌套循环实现
- 输出矩阵
- 漂亮的输出一个矩阵
-
代码(全程高能)
-
#读取-转换 list 一共三个元素 input_number = input() list_input_numbers = list(map(int,input_number.split())) #根据题目,简化你的变量名称,要不你这一个列表的值的意义不一样,不方便阅读 n = list_input_numbers[0] p = list_input_numbers[1] m = list_input_numbers[2] #矩阵-初始化 list_matrix_A = [[0] * p for _ in range(0,n)] #A matrix-矩阵 list_matrix_B = [[0] * m for _ in range(0,p)] #B matrix list_matrix_result = [[0] * m for _ in range(0,n)] #结果 mareix #继续读取 #matrix_A for k in range(0,n): list_matrix_A[k] = list(map(int, input().split(' '))) for k in range(0,p): list_matrix_B[k] = list(map(int, input().split(' '))) x = 0 for i_0 in range(n): for j_0 in range(m): list_matrix_result[i_0][j_0] = sum(list_matrix_A[i_0][x] * list_matrix_B[x][j_0] for x in range(0,p)) #print(list_matrix_result) for 循环 in list_matrix_result: for 循环2 in 循环: print(循环2,end="\t") print() -
解读
-
读取:
-
处理 行 和 列【range函数不到最后一位 + 列表以[0]开始索引】
-
#读取-转换 list 一共三个元素 input_number = input() list_input_numbers = list(map(int,input_number.split())) #根据题目,简化你的变量名称,要不你这一个列表的值的意义不一样,不方便阅读 n = list_input_numbers[0] p = list_input_numbers[1] m = list_input_numbers[2]
-
-
初始化
-
本题一共涉及三个矩阵
- 两个输入的+一个输出的
-
矩阵初始化 是临时用一个值”帮“矩阵占位置
-
#矩阵-初始化 list_matrix_A = [[0] * p for _ in range(0,n)] #A matrix-矩阵 list_matrix_B = [[0] * m for _ in range(0,p)] #B matrix list_matrix_result = [[0] * m for _ in range(0,n)] #结果 mareix
-
-
这也就意味着——你在赋值的时候,不可以使用
.append()方法,而是要使用=赋值, 从而
-
#继续读取 #matrix_A for k in range(0,n): list_matrix_A[k] = list(map(int, input().split(' '))) for k in range(0,p): list_matrix_B[k] = list(map(int, input().split(' ')))
-
-
-
实现乘法:
-
x = 0 for i_0 in range(n): #循环行 for j_0 in range(m): #循环列 【注意】行和列是不可以反顺序的! list_matrix_result[i_0][j_0] = sum(list_matrix_A[i_0][x] * list_matrix_B[x][j_0] for x in range(0,p)) #矩阵乘法sum求和函数,同时,一个
X两个正好同时变- 在操作是很容易超”量程“ 请自习理解 列表的索引和range()函数的遍历结果 :
-
-
输出矩阵:
-
for 循环 in list_matrix_result: for 循环2 in 循环: print(循环2,end="\t") print()- 中文也可以是变量名
- for in循环的深入理解:
- 不同于C语言的数组遍历,只能以下标访问,python语言的for in是也可以纯纯代表元素,每次移动一个元素
-
-
-
运行时出现的一点问题:
- python中,如果你不对输入错误进行处理,那么python会根据你的输入来反馈你的程序编的对不对,当你的程序运行时报错啦,请先检查你的输入是否正确,在考虑你程序的问题
- 例如上述程序:
- 如果你输入:
1 2【本来应该是:1 2 2就是三个数】 - ta就会报错,让你以为自己程序错误(这里是”量程“问题)了
- 如果你输入:

浙公网安备 33010602011771号