去学经济学了,结果大三选了python,重新捡起来继续
注:仅作为个人学习记录,不保证正确性以及其他任何,欢迎大佬随时指出错误!
Week 1 L1:
- 又见“hello world”,可以说不管什么语言,不管什么领域,教编程第一步永远是让计算机输出 Hello World 吧。好像又回到...大概16年,我们学的还是Pascal那个语言,第一次输出“Hello World”的时候。输出语句:
print("hello world")
不需要打分号好不习惯啊(来自C++人的执念)
-
#使用#来做注释,再见双斜线 import numpy as np#见下文 x = np.array([1,2,3,4])#定义数组吗? y = np.sum(x)#python这么简洁吗?? z = 3+4 print(x) print(y) print(z)#习惯C++x写这个还挺别扭,话说这绝对不是完整的一个程序吧
- package and import(导入)
from numpy import * #从package导入,注意名称不要重叠
from numpy import cos #only import cosine function from package numpy
import numpy numpy.cos(0) #又一种方法
import numpy as np np.cos(0) #2中使用的
但是numpy这个package老师你怎么不告诉我们在哪里下载...写惯了C++感觉思维僵化,满脑子是自己现写函数。
- 定义 Data Types 以及 Legal Variable Names (与C++差不多)
x, y, z = 1, 3.1415, 'a' #用逗号分隔,很简便
Week 1 L2:
Core Native Data Types
Numeric; Boolean布尔变量; String; Lists列表没见过; Tuples?; Dictionary词典是什么意思; Sets; Range;
1. Numeric(这井号注释怎么一会儿好用一会儿不好用)(float, int, complex)
x = 1 type(x)#输出x的变量类型 int x = 1.0 type(x)#已经从 int 变成 float 了,输出 float x = float(1) type(x)#输出还是float int(1.6)#输出会是 1
- complex number :使用“j”或者“complex()”来设置变量
x = 2 + 3j x = complex(1,2)#x=1+2j
2. Boolean(bool)
x = bool(0)#这是false x = bool("")#这也是false x = bool(1)#True x = bool(0.5)#这也是True,非零非空表示True
2. Strings(str)
1 x = 'abc'#字符单引号 2 y="123"#数字双引号 3 z = '"A quotation!"'#熟悉的单双引号互换 4 x = 'python string' 5 x[-1]#这表示 g (就像土包子进了城,tmdC++ 你学学人家) 6 L = len(x)#求字符长度
python中,所有的 variable[] 依旧以‘0’为起始
x[0:10:2]#从 0 到 10 ,间隔隔2个空间输出 x[0:0:-1]#倒着输出(C++人羡慕了) x[10:]#输出'ing' x[-3:]#还是输出'ing'
- f-Strings 新的格式
price = 100.3312#先定义2个变量 一个float volume = 132000#一个int f'The price yesterday was {price} and the volume was {volume}'#输出:'The price yesterday was 100.3312 and the volume was 132000' f'The price yesterday was {price:.1f} and the volume was {volume}' # {price:.1f} 保留了一位小数。输出:'The price yesterday was 100.3 and the volume was 132000'
f-Strings allow variables to be directly included in the string which saves appending format method to the string.
4. Lists(list) 以前我习惯叫类似的变量为数组
x = []#设立一个list(好tm简单,不需要设定空间吗?可能是我以前NOIP后遗症,不知道平常人怎么写代码,C++可以这么搞吗?) x = [1]*5#Elements can be repeated using * 此时x==[1,1,1,1,1] #下面是2维数组 x= [[1,2,3,4],[1,2,3]]#这么搞会经常少写括号吧,想起自己悲惨往事。 #以及可以定义Mixed data types x = [1,1.0,1+0j,'one',True]
List Functions and Methods:
multidimensional list
x = [[1,2,3,4],[5,6,7,8]] x[0]#里面是1,2,3,4 x[1]#里面是5,6,7,8 x[0][0]#里面存储1 x[1][1:4]#里面是6,7,8
x.append(0)#在一维list的队尾插入 0 len(x)#求x中元素量 x.extend([2,3,4])#向list x 中加入list[2,3,4] x.pop(1)#弹出x[1]中的元素,所有元素前移 x.remove(3)#删去list x 中第一个出现的 3 x.count(1)#计算 list x 中有几个 1 x.index(4)#输出 4 在list x 中最早出现的位置 del x[2]#删去x[2]中元素,无输出 del x[:]#list x 变为空集
5.Tuples(tuple)
x.count(2)#计数 x.index(4)#输出元素 4 所处的位置 x = (2)#这是int x = (2,)#这是tuple
6.Dictionary(dict)
类似于自己定义一组语言,每个空间有了自己的名字与储存的内容
data = {'age': 34, 'children' : [1,2], 1: 'apple'}#使用了大括号{} data['age']#输出34 data['children']#输出[1,2] data[1]#输出 apple data['name'] = 'abc'#向dict data中添加元素 del data['age']#删除元素 #其中的'age' 'children' 1 'name' 都被称为key,所存储的内容为value data.keys()#输出所有的keys,但有前缀 data.values()#输出所有的value,但有前缀 list(data.keys())#单纯输出所有keys list(data.values())#单纯输出所有value data.items() #dict_items([('children', [1, 2]), (1, 'apple'), ('name', 'abc')])输出这些 list(data.items()) #[('children', [1, 2]), (1, 'apple'), ('name', 'abc')]输出这些
7.Sets(set)
x = set([1,2,3,4,2])#定义一个set x.add(5)#向集合中添加元素,如果已经有了此元素,集合不变 y = set([2,3,6]) x.difference(y)#求x中有,y没有的元素 x.intersection(y)#求x与y的交集 x.remove(2)#删一个元素 x.union(y)#求并集
8.Range(range)
range常见于for循环(这也算数据类型吗?)
range(a,b,i)意为 a, a+i, a+2i +...+ a+mi <=b
range(a,b) 就是range(a,b,1);range(b)就是range(0,b,1)
list(range(0,10,3))#输出 0,3,6,9 x = range(10) print(x) list(x)#注意print 和list 输出的区别
9.关于python对变量的空间定义(?)
如果直接 y = x ,在计算机内部2者使用同一空间,一方变化,另一个也改变内容
使用y = x[:] 或者 y = x.copy() 可以解决这个问题
但是在2维list中,copy不适用
引入 module copy,使用 y = cp.deepcopy(x) 来解决问题
L3 Flow Control and Excepting Handing
一. Comparisons and Logical Operators
x<y<z#这是可以直接比较的 x<=y<=z#也是可以直接写的 x == y#等于的写法和C++一样 x != y#我有些忘记以前不等于是不是这样了 not True#就是False,可是我为什么要这么写。此外还有and or all([1<2,2<3,3<4]) any([1 <= 2 , 5 <= 6, 6 <= 7]) #可以使用all和any来判断list里的True False 1 in [0, 1, 2]#x in y returns True if x is included in y 1<2>1#还可以这么写?牛的 #不仅仅list 还有set range tuple 1 in (0, 1, 2)#True 1 in {0, 1, 2}#True 1 in range(3)#True
二. Flow Control
1. if...elif...else(实在没啥好说的)
2. for循环
for i in iterable code to run#循环代码
a_dict = {'color': 'blue', 'fruit': 'apple', 'pet': 'dog'} for i in a_dict: print(i,":",a_dict[i]) #color : blue #fruit : apple #pet : dog。 特别的数据类型的for循环
(1) zip function allows you to iterate in parallel over two or more iterables.
**注意使用print的方式
(2) break 嗯,没有变化,过了
(3) enumerate 枚举?翻译应该不是这意思
(4) continue 也没变化,跳过此次循环后面部分
3. while 循环
基础使用无变化
4. List Comprehension
import numpy as np
x = list(range(5)) y = [] for i in range(len(x)): y.append(np.exp(x[i]))#y 存储 e 的 i 次方
#如果使用List Comprehension 则
z = [np.exp(x[i]) for i in range(len(x))] # or z = [np.exp(i) for i in x]
(写累了,这老师怎么填鸭式教育啊)
* set, tuple, dict 的list comprehension:
三. Expectation Handing
(1) try...expect
else, finally, raise...
L4 Functions and Modules
4.1 Function Bastic
import numpy as np np.random.randn()#生成随机数
4.2 Custom Function
先在课件上写笔记了,有梳理的必要的再整理。
1. 定义函数
2. Argument
3. Variable Number of Inputs 可变输入数量
(1)*args
The ⁎args
syntax will generate a tuple containing all inputs past the required input list.
def myFun(arg1, *argv): print("First argument :", arg1) for arg in argv: print("Next argument through *argv :", arg)#输出见note
4. Variable Scope变量作用域
5. lambda Functions#特别的函数,简单的处理输入的变量
4.3 Module and package
L6 Numpy
1.0 Array 数组
import numpy as np x = [0.0, 1, 2, 3, 4] y = np.array(x)#变数组 np.shape(y)#输出shape
1.1.1 dtypes
1.1.2 存储时改数据类型 y = array(x, dtype='float64')
1.2.1 np.ndim(x) 输出数组维度 Array Dimensions
np.shape(x) 输出数组的规模
1.2.3 np.zeros((2, 2, 2)) 创建全为 0 的3维数组
1.3.1 对于一维Array , x[0]表示第一个element
对于二维数组, x[0,0]表示第一个element x[0]表示第一行elements
1.3.2 Array Slicing tmd怎么这么长
np.arange(25.0) 创建一个序列
y = np.reshape(np.arange(25.0),(5,5)) 制作一个5x5的,0到24 的矩阵
y.flat[12:15]#只会输出一维
2.1.0 Array assignment
x[0,:] = array([1.0, 2.0, 3.0])
2.1.1 np.pi ==3.1415926......
2.2.2 x+y array的相加性质相减
np.tile(x,(3,1)) 类似于复制,但有一定大小限制
2.2.3 矩阵乘法 x @ y : x.dot(y) np.dot(x,y)
3.1.0 生成矩阵