(本文当作一个学习笔记,也是自己学习过程中一些比较觉得很有用的东西)
一. 变量,输入输出
1.1 数值
这里没有像C语言一样,int四个字节,long long 八个字节,float单精度 ,double双精度,这种分别,python只有整型和浮点型。
1.1.1 整型
这里的int就是整数的意思,没有范围。因为没有数据类型所以,数据的定义直接a = 1。
int(变量名字) 可以实现强制数据类型转化为整数。
1.1.2 浮点型
此处的浮点型也没有双精度,单精度之分,例如a = 3.14
1.1.3 abs,int,round函数
abs()函数可以返回数字的绝对值。例如:
int()函数可以实现数字的强制类型转换,转换为整型。注意此处int()是函数,不像C语言(int)a可以实现强制类型转化。例如:
round()函数可以实现浮点数的四舍五入结果,round(n,r) 为n保留r为小数,四舍五入后的结果。例如:
1.1.4 表达式
像C语言一样,可以实现加减乘除,这里Py新增了一下几种种运算符:
** 是乘方的意思,不过复杂度是O(n)的,内部实现没有使用快速幂算法优化。
// 是求商部分,也就是除法运算向下取整后的结果。 由于Py一个变量没有int和float之说,所以想得到整数要么使用int()函数要么使用 // 运算。
1.1.5 Py中数据对象的存储
当执行第一行代码后,系统开辟空间存储数字5,然后n相当于一个引用。
当执行第二行代码后,系统重新开辟空间存储数字6,更改n的引用位置。
此处是有别于C语言的。
至于闲置内存的回收由Py的某个进程负责。
1.2 字符串
1.2.1 字符串表示
字符串在Py中不像C语言需要字符数组或者string来存储,字符串是一个由
单引号或双引号
括起来的整体。例如:
‘ Hello Python! ’ , " Hello Python! "
字符串可以直接赋值给变量。例如:
、
1.2.2 索引以及切片
同C语言,字符串具有从0开始的索引,到 len-1 结束。不同的是字符串也有反向索引,字符串的最后一个下标为-1,倒数第二个为-2,等等
字符串也有切片的功能,a[m:n] 即为,下标为n开始到下标为m的前一个。a[m: ]为从m截取到最后。
1.2.3 字符串常用操作
len()函数返回字符串长度,例如:
upper() / lower( ) 返回字符串转化为 大 / 小 写字母组成。调用后并不影响字符串本身
rstrip()函数可以去除末尾空格
1.3 输入输出函数
1.3.1 input函数
input(提示输入信息),返回值为输入的字符串,碰到Enter为止
很像C语言的gets函数,经常配合split(),int(),float () 使用。
1.3.2 print函数
同C语言 ‘ \ ’为转义字符。
print(val1 , val2 , val3) , 输出以空格分割的三个变量,并且自动换行
print(val1, val2 , val3 , sep = '+') , sep参数可以改变分割的字符
print(val1, val2, val3, end = ""), end参数可以改变终止的换行符
这里有一个很厉害的函数eval ( ),记不记得C语言打表达式求值的死亡大模拟,这个函数可以直接求表达式的值
1.3.3 格式化输出
print( 字符串.ljust(w) ) 输出字符串向左对齐,字宽为w
print( 字符串.rjust(w) )输出字符串向右对齐,字宽为w
print( 字符串.center(w) )输出字符串居中,字宽为w
二、 列表,元组,文件
2.1 列表
列表是一个有序序列,元素可以是
任意的类型。
2.1.1 列表的定义
列表的定义为a = [ "qwe" , 123 , 3.14 ]
2.2.2 列表操作函数
len()函数返回列表的元素个数。
max( ) / min( ) / sum() 返回列表的最大值 / 最小值 / 和。(必须都为数值)
列表 . count(查找元素)返回所查找元素的数目
列表 . append(末尾插入对象)
列表 . insert (插入位置,插入元素)
split(s1)函数 ,将字符串以s1分割存入列表,返回一个列表。
s1. join(列表)函数,可以看作 split()的反函数,将列表中的元素用s1分割,
2.2.3 列表的复制
在Py中列表名可以看作一个空间的引用,所以当我们要复制列表的时候不可以直接list1 = list2,如果修改list1,同样list2会被修改。
2.2 元组
元组是不可改变的有序序列。也可以像字符串一样切片。
元素的定义为 a = (val1 , val2 , val3 ) 或者 a = val1 , val2 , val3
Py 里交换元素可以 x , y = y , x 实际上是为元组赋值
2.3 文件
2.3.1 打开文件
file = open( “ 文件路径 ” ,权限 )
file 为文件句柄
2.3.2 关闭文件
打开文件后一定要有关闭操作。
file.close( )
2.3.3 文件读
file.read()
2.3.4 文件写
file.write() 返回写入文件字符的数目。
注意:键入file.close()才会真正写入文本。
三、控制流结构
3.1 Python新增逻辑表达运算符
3.1.1 ASCII码与字符的转换
因为Py中没有char这个类型,所以想要实现ASCII码和数字之间的转换也需要函数。
ord('A') 返回字符的ASCII码
chr(65) 返回ASCII码为65的字符
3.1.2 in 与 sort
C语言原有的Py都有,但是新增了几个十分便利的
in 是个二目运算符,返回结果为前者是否为后者子串或者子元素,同样也有not in。
sort 列表排序函数,和C语言#include 中的sort 功能一样,调用更便捷。例如:
但是sort要求列表元素都为数值或者字符串。
3.1.3 自定义排序
在C语言中要想自定义,需要重载运算符,或者手写比较函数,Py中调用更为方便。
list . sort ( key = 第一优先级 )
可以实现自定义排序
reverse参数可以设置逆序还是正序。
list . sort( key = 第一优先级 , reverse = True)
sort函数直接对原来的列表进行了修改,sorted函数不对原列表修改,而且返回排序后的列表
还有多优先级并且升降序不同,要自己定义的时候,需要用到functools模块,在后边函数的时候会重点提到。
3.2 循环结构和分支结构
这一部分和C语言很相似,记住
子语句与父语句保持四个空格的缩进。
3.1.1 while的用法
while 表达式 :
函数体
3.1.2 for的用法
如果遍历元素为数字的话: 和C语言for(int i = n;i < m ; i++){ 函数体 }
for i in range ( n , m ):
函数体
n = int(input("Input n : "))
for i in range (1,n+1):
for j in range(1,n-i+1):
print(" ",end = "")
for j in range(1,2*i):
print("*",end = "")
print("")
如果要实现for(int i = n ; i <= m ; i += s) 这样的功能,可以使用for i in range (n , m , s)
for也可以直接遍历字符串或者列表值。
for也可以行读文件 for line in 文件句柄: (记得关文件)
3.1.3 分支结构
if 语句 就是 if 表达式 :
else 变成了 elif 表达式 :
else else :
同时Py的 break 和 continue不变 。
记住子语句与父语句四个空格缩进就好。
四、函数
(因为C语言的函数和Py的函数十分相似,所以这里重点讲Py的cmp_to_key。)
4.1 函数的定义以及参数作用域
4.1.1 函数的定义
函数的定义不像C语言要确定一个返回值类型,因为在Py中没有严格的变量类型的区分。
只需要使用def 关键字即可定义。同时参数也不需要指明类型,返回值也没有类型,非常简单。
4.1.2 函数骚操作
Py 可以返回多个参数,其实相当于返回值是一个元组,赋值的也是个元组
同时还可以按照参数名传参数,很骚的东西,感觉没什么大用。
4.2 自定义多优先级排序
在Py3中手写cmp函数被取消了,必须要使用function函数中的cmp_to_key()函数进行多优先级排序。
cmp_to_key ( mycmp ) 中 mycmp 就是自定义的手写函数。
参数为要排序元素
定义手写函数的时候,需要两个参数(val1 , val2),
如果满足条件后,
val1 排在后边 返回 1
,排在前边返回 -1
,如果完全相等返回0,
这个返回0 不可以像C语言自定义排序那样不写,否则函数无效。
例如:先按照分数高低排,分数一样按名字字典序排序
import functools
def cmp1(n1, n2):
if(n1[1] > n2[1]):
return -1
elif(n1[1] < n2[1]):
return 1
else:
if(n1[0] > n2[0]):
return 1
elif(n1[0] < n2[0]):
return -1
else:
return 0
a = [['lili',96],['xiliang',90],['hailu',94],['hailong',94]]
print(sorted(a, key=functools.cmp_to_key(cmp1)))
sort还有很多花里胡哨的用法,此处不再介绍,
一个手写cmp函数可以解决一切sort优先级问题。