Python基础
一、基础知识
1.1.计算机组成原理
一个完整的计算机系统,是由硬件系统和软件系统两大部分组成的。
1.2注释
#注释一行
Ctrl+/ 多行注释
1.3变量
变量名是标志符(作为变量、函数、类、模块和文件等对象的名称,以方便程序调用)的一种,因而也要遵守标识符的命名规则。
1.只能包含字母、数字、下划线、并且不能以数字开头
2.不能与系统关键字、模块名相同(又称保留字,它们是Python语言中的一些已经被赋予特定意义的单词。如False,True,if,else等)
3.严格区分大小写
4.尽量使用有意义的英文单词
5.多个单词之间使用下划线连接
python中的变量不需要声明,变量的赋值操作即是变量声明和定义的过程。python中一次新的赋值,将创建一个新的变量。如果变量没有赋值,则python认为该变量不存在。即是变量的名称相同,变量的标识并不相同。值存放在内存中的某个位置,变量只是用于引用而已。用id()函数可以获取变量标识:
从图中可以看出他们俩返回的地址不同,这是为什么?
实质上,例如程序在执行语句x = 3时, Python要做以下三个事情。
①创建一个对象,即分配一块内存以存储数据3
②创建一个变量x,如果它还没有创建的话。
③将变量名x与对象关联起来,创建变量并使用变量引用对象。
在函数之外定义的变量都可以称为全局变量。全局变量可以被文件内部的任何函数和外部文件访问。全局变量建议在文件的开头定义。也可以把全局变量放到一个专门的文件中,然后通过import来引用。
1.4常量
python中没有提供定义常量的保留字。可以自己定义一个常量类来实现常量的功能。(在计算机程序运行时,不会被程序修改的量)
1.5输出
print()是Python内置函数,功能是输出运算结果。print()函数的语法格式如下:
print(*objects, sep='', end='\n', file=sys.stdout)
其中,objects表示输出的对象,输出多个时用逗号分隔;sep 用来分隔多个输出对象,默认为一个空格(输出显示时候用空格分开的,比如输入了1,2,3,输出是1 2 3); end 用来设定本次输出以什么结尾,默认是换行符\n;file表示想要写入的文件对象,默认是标准输入输出。
其他格式化输出举例:
1.6输入
input()是 Python内置函数,功能是接受标准的输入数据。无论用户输入什么内容,input()函数都以字符串类型返回结果。
输出如下:
1.7运算符
python不支持自增运算符和自减运算符。例如i++/i-是错误的,但i+=1是可以的。
“/”和“//”的区别:
“/”指的是浮点数除法, 只要“/”;两边有一个数是浮点数,那么结果就是浮点数
“//”指的是整数除法,运算之后对结果向下取整
不等于为!=或<>,等于用==表示
逻辑表达式中and表示逻辑与,or表示逻辑或,not表示逻辑非
幂运算符的运算顺序(3**2**3):相当于,先算2的三次方,幂运算优先于乘法运算
1.8数据类型及其转化
python的数字类型分为整型、长整型、浮点型、布尔型、复数类型。python没有字符类型,只有字符串。除此之外还有列表、元组、字典和集合类型。
python内部没有普通类型,任何类型都是对象。如果需要查看变量的类型,可以使用type类,该类可以返回变量的类型或创建一个新的类型。
python有3种表示字符串类型的方式,即单引号、双引号、三引号。单引号和双引号的作用是相同的。三引号中可以输入单引号、双引号或换行等字符。
当使用eval(str)去转字母时会报错,因为eval会去除引号,比如”abc“,变成abc变量,但是如果python中没有定义abc这个变量的值,将会报错
但是如果存在变量f
1.9比较运算符
二、逻辑控制
2.1if判断语句
1、每个条件后面要使用冒号 :,表示接下来是满足条件后要执行的语句块。
2、使用缩进来划分语句块,相同缩进数的语句在一起组成一个语句块。
3、在Python中没有switch – case语句。
2.2循环语句
2.2.1while循环
2.2.2for循环
for 循环是python中的另外一种循环语句,提供了python中最强大的循环结构,它可以循环遍历多种序列项目,如一个列表或者一个字符串(sequence可以试列表元组集合,如果是字典只能遍历keys,无法遍历values)
2.2.3break和continue
break:在循环体内遇到break则会跳出循环,终止循环,并且不论循环的条件是否为真,都不再继续循环。
continue:退出当前循环,再继续执行下一次循环。
三、字符串和列表
3.1字符串
f-strings:提供一个简洁易读的方式,可以在字符串中包含Python表达式。f-strings以字母”f"或“F”为前缀,格式化字符串使用一对单引号、双引号、三单引号、三双引号。
使用大括号{}表示被替换字段,直接填入替换内容
3.2下标和切片
下标:又称作索引,也就是编号。比如火车座位号,座位号的作用:按照编号快速找到对应的座位。同理,下标的作用即通过下标快速找到对应的数据。
下标在Python中是从0开始。
负数指的是反向的取值。取值超出范围会报错。
切片:在Python中,切片(slice)是对序列型对象(如list
, string
, tuple
)的一种高级索引方法。普通索引只取出序列中一个下标对应的元素,而切片取出序列中一个范围对应的元素,这里的范围不是狭义上的连续片段。下面的代码初步展示了切片索引的力量。
能得到下标在这样一个前闭后开区间范围内的元素。
切片的两个特殊情况:超出有效索引范围和缺省
超出有效索引范围时,切片操作不会抛出异常,而是进行截断。
可以这样去理解截断机制:我们假象把索引范围扩充到全体整数,只不过小于或大于的区域对应空元素,在这个扩充后的数轴上进行切片,只需把最终结果中的所有空元素忽略即可。如果start
的位置比stop
还靠后,Python还是不会抛出异常,而是直接返回空序列。
在缺省的情况下,Python的行为是尽可能取最大区间,相当于数学集合中的无穷大和无穷小。
步长为负,意为从后往前取值,起始必须比结束大,否则返回空序列。
3.3常见操作
# 常用操作 # find:检测str是否包含在字符串中,如果是返回开始的索引值,否则返回-1 print(text.find("b")) # index:跟find()方法一样,只不过如果str不在字符串中会报一个异常 print(text.index("c")) # count:返回str在start和end之间在字符串中出现的次数 print(text.count("a")) # replace:把字符串中的str1全部替换成str2,如果count指定,则替换不超过count次. print(text.replace("a","k",1)) # 以str为分隔符切片字符串,如果maxsplit有指定值,则仅分隔maxsplit个子字符串 a = "abc,de abc" print(a.split(",")) # capitalize:首字母大写 print(text.capitalize()) # title:每个单词首字母大写 print(a.title()) # startswith:检查字符串是否以hello开头,是则返回True,否则返回False print(text.startswith("hello")) # endswith:检查字符串是否以hello结束,是则返回True,否则返回False print(text.endswith("hello")) # lower:转换字符串中所有大写字符为小写 text="ABCDef" print(text.lower()) # upper:转换字符串中所有小写字符为大写 print(text.upper()) # lstrip:删除字符串左边的空白字符 # rstrip:删除字符串右 边的空白字符 # strip:删除字符串两边的空白字符 b = " abc " print(b.lstrip()) print(b.rstrip()) print(b.strip()) # isdigit:字符串只包含数字,则返回true,否则返回false print(text.isdigit()) # join:每个元素后面拼接上字符串构造出一个新的字符串 print(" ".join(b))
3.4列表
list:list是python内置的一种高级数据类型。list是一种有序的集合,基于链表实现 在python中应用很广泛。
列表中的元素可以是不同类型的
打印列表:输出:zhang
3.5列表的遍历
3.6列表的常见操作
# append()列表后面添加元素 food = ['egg', 'fish', 'cake', 'tomato'] food.append('ice') # 在list的末尾添加元素 print(food) # insert()指定位置添加元素 food = ['egg', 'fish', 'cake', 'tomato'] food.insert(1, 'meat') # 在1这个位置添加元素 print(food) food.insert(1, ['apple', 'orange']) # 此处['apple', 'orange']将作为一个元素添加进去,如果想要添加列表,可以用后文的extend print(food) # extend():合并列表 list1 = [1, 3, 3, 4, 5] list2 = [6, 5, 8, 9] list1.extend(list2) # 在列表1后面添加列表2 print(list1) # in,not in 查找 food = ['egg', 'fish', 'cake', 'tomato'] a = 'apple' if a in food: print("存在") if a not in food: print("不存在") # count()返回的是某个元素在列表里面的个数 list1 = [1, 3, 3, 4, 5] print('count:', list1.count(3)) # 统计3在列表中出现的次数 # index()返回的是元素在列表中的第一个位置 list2 = [1, 2, 4, 5, 7, 4] print('index:', list2.index(4)) # 从列表中找出第一个数值为4的索引位置,不管第二个 # 删除元素 list1 = [1, 3, 3, 4, 5] # del 根据下标进行删除,如果不加下标,会删除整个变量 del list1[0] print('del:', list1) # pop 删除元素,并且返回删除元素(默认删除最后一个) print('pop:', list1.pop(1)) # 删除下标为1的 # remove()---------- 删除某个元素,如果有重复,删除的是第一次出现的元素,如果元素不存在会报错 list2 = [1, 2, 4, 5, 7, 4] list2.remove(4) # 从列表中找出第一个数值为4的值然后删除,不管第二个 print('remove:', list2) # clear():清除元素 list2 = [1, 2, 4, 5, 7, 4] list2.clear() print(list2) # sort()进行排序(从小到大int类型)可以对字母进行排序(ASCII值)类型不能混 list2 = [1, 2, 4, 5, 7, 4] list2.sort() # 对原列表进行排序 print('sort;', list2) # reverse()将列表进行翻转 list2 = [1, 2, 4, 5, 7, 4] list2.reverse() print('reverse;', list2) # copy()浅拷贝对象不等价与 = list1 = [8, 9, 0] list2 = list1.copy() print(list2)
3.7元组
元组:与列表相似,不同之处就在于元组的元素不能被修改(修改报错)。列表使用的是中括号“[]”,元组使用的是小括号“()”。Python内部对元组进行了大量的优化,访问和处理速度都比列表快。
3.8字典
字典是通过名字来引用值的数据结构,并且把这种数据结构称为映射,字典中的值没有特殊的顺序,都存储在一个特定的键(key)下,键可以是数字、字符串甚至元组。字典也是python中唯一内建的映射类型。
字典由多个键和其对应的值构成的键—值对组成,键和值中间以冒号:隔开,项之间用逗号隔开,整个字典是由大括号{}括起来的。
3.9字典的常见操作
# 添加/修改 增加新的键值对,对新增加的键赋值/对已有的键直接赋值 student = {'name': 'zhang', 'age': '18', 'sex': 'male'} student['score'] = 60 # 添加 student['age'] = 20 # 修改 print('添加、修改:',student) # 删除 用 del 命令删除一个字典的键 del student["年龄"] # 删除key对应的键值对 print('del:', student) # clear() 清空字典中所有的键值对 student.clear() print('clear:',student) # pop() 删除括号内key对应的键值对 返回值:当前key对应的value print('pop:', student.pop('age')) # 返回当前被删除的键值对中key 'age' 对应的value print(student) # popitem()删除最后一对键值对 返回值:最后一对键值对 print('popitem:', student.popitem()) print(student) # update() 更新字典,将括号内的字典添加原字典中,如果key相同,value值覆盖 student1 = {'name': 'zhang', 'age': '18', 'sex': 'male'} student2 = {'name': 'zhang', 'age': '20', 'score': '100'} student1.update(student2) print('update:', student1) # setdefault() # 1.查询括号内key对应的value值 # 2.如果key不存在,则添加。value默认为None student = {'name': 'zhang', 'age': '18', 'sex': 'male'} print('setdefault', student.setdefault('score',100)) # 当student中不存在key "score"时会添加进去,value指定为"100" # keys() 查询字典中所有的key print('key:',student.keys()) # values() 查询字典中所有的value print('values:', student.values()) # items() 查询字典中所有的键值对 print('items:', student.items()) # copy() 复制 student1 = {'name': 'zhang', 'age': '18', 'sex': 'male'} student2 = student1.copy() print('copy:', student2)
3.10字典的遍历