文章目录
关于python
python的优点:开源、易于维护; 可移植; 易于使用、简单优雅; 广泛的标准库、功能强大。。。。
python的缺点:运行速度较慢(python是解释性语言,运行时翻译为机器码非常耗时); 代码不能加密(解释性语言发布程序就是发布源代码,而c语言只需要把编译后的机器码发布出去,从机器码反推出c代码是不可能的。
python的典型应用:
(https://img-blog.csdnimg.cn/ba1c0d9cfa5c4bc2aebb7509f3a5c765.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAbTBfNjI2OTAyNzk=,size_20,color_FFFFFF,t_70,g_se,x_16)
python常用关键字:
(https://img-blog.csdnimg.cn/d6a1af44156e4d27918bb42538bf7fe8.png)
查看当前版本的所有关键字:cmd中输入以下内容
效果:
(https://img-blog.csdnimg.cn/47ae04831a7541c380836290a3cd5c65.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAbTBfNjI2OTAyNzk=,size_20,color_FFFFFF,t_70,g_se,x_16)
输入
格式化输入的语法:
age = 18
print("my name is %s,my nationality is %s"%("小张","CHN"))
print("my age is: %d"%age)
eg.分割
sep="" 是设定分割的符号;
end=""是设定结束的符号,引号内可加\t \n…
查看变量的类型用
a = input("输入:")
print(type(a))
print("输入了一个数字: %s" %a)
此时输入“123”,结果显示a的类型为字符串,说明 将“123”当作字符串的类型来输入赋值给a 。
若要对a进行计算,就要给它进行强制类型转换。
a = int("123") #强制转换为int整型
print(type(a))
b = a + 100
print(b)
c = int(input("输入:"))
print("输入了一个数字: %d" %c)
eg.猜拳游戏:
u=input("请输入:剪刀(0)、石头(1)、布(2):")
import random
c = random.randint(0,2)
u = int(u)#
print ("随机生成数字为%d"%c)
if u==0:
if c==0:
print ('draw')
elif c==1:
print ('win')
elif c==2:
print ('lose')
elif u==1:
if c==0:
print ('lose')
elif c==1:
print ('draw')
elif c==2:
print ('win')
elif u==2:
if c==0:
print ('win')
elif c==1:
print ('lose')
elif c==2:
print ('draw')
第4行的 u = int(u) 是对u进行强制型转换
运算符
设a=10;b=21
算术运算符:
比较运算符:
赋值运算符:
运算符的优先级:
判断和循环
条件判断:
import引入模块:
循环
for i in range(1,10,3):
print(i)
*不仅可以循环数字,还可以循环字符串;
*输出的每个x的值的后面默认是"\n"
name="chengdu"
for x in name:
print(x,end="\t")
输出
for循环的三种写法:
1.步进值的写法
for i in range(0,11,3):
print(i)
2.从0开始的写法:
for i in range(5)
print(i)
3.遍历的写法:
a=["aa","bb","cc","dd"]
for i in range(len(a)):
print(i,a[i])
while循环:
i=0
while i < 5 :
print("当前是第%d次循环"%(i+1))
print("i=%d"%i)
i += 1
运行结果:
while循环题目:输出1-100之间的数字和:
i=1
count = input("请输入一个大于1的整数:")
sum = 0
while i <= int(count) :
sum += i
i += 1
print("1-%d和为%d"%(int(count),sum))
输出:
while循环中的else用法:
count = 0
while count < 5 :
print(count,"<5")
count += 1
else:
print(count,">=5")
输出:
else用在当while条件不满足时执行的语句。
其它语句:
简单举例continue:
i=0
while i<10:
i+=1
print("-"*30)
if i==5:
continue
print(i)
打印一个九九乘法表:
for i in range(1,10):
for j in range(1,i+1):
print("%d * %d = %d"%(i,j,i*j),end="\t")
print("\n")
输出:
字符串
python中的字符串可以用:单引号、双引号、三引号(三个单or三个双)
eg. ‘字符串’
“这是一个句子”
‘’’ 这是一个段落
可以由多行组成
‘’’
重复符号,转义字符的用法\:
当我们要输出一个 带有单引号或其它引号的字符串、句子等 的时候,编译器会报错:
str ='I'm a student'
print(str)
解决这个问题只需要在第二个单引号前加上反斜杠\
str =' I\'m a student'
print(str)
输出:
所以当觉得解释器会报错的时候,就应该在一些觉着有问题的地方加上\
常用的转义字符:
字符串的处理:
字符串的截取:
[起始位置:结束位置:步进值];
起始位置和结束位置若分别是开头和结尾的话可以省略不写;
word = "CUIT"
print(word)
print(word[0])
print(word[0:3])
输出:
字符串的连接
字符串的连接可以用+
word = "CUIT"
print(word+"你好")
输出:CUIT你好
有些字符串的前面加了一个“r”,就说明该字符串里面的转义字符不进行解释
字符串的常见操作:
列表——python的核心数据类型
1.类似于其它语言中的数组,但其特点是列表中的元素类型可以不相同,可以支持数字、字符串、甚至是列表(所谓嵌套)。
testlist = [1,"春"]
print(type(testlist[0]))
print(type(testlist[1]))
2.列表写在[]之间,用逗号分隔开。
3.列表索引值以 0 为开始值, -1 为从末尾开始位置。
4.列表可以使用 + 操作符进行拼接,使用 * 表示重复。
列表的定义、使用:
namelist = [1,"春"]
for name in namelist :
print(name)
输出:1
春
列表操作
1.列表增加:【append、extend、insert】
1.append:在列表末尾增加元素。
namelist = ["zhang","wang","li","zhao"]
print("----------增加前----------")
for name in namelist:
print(name)
nametemp = input("请输入添加学生的姓名")
namelist.append(nametemp) #在列表末尾增加元素
print("----------增加后----------")
for name in namelist:
print(name)
输出:
2.extend:扩展列表的元素
a = [1,2]
b = [3,4]
a.append(b)
print(a)
a.extend(b)
print(a)
输出:
3.insert
a = [0,1,2]
a.insert(1,3)
print(a)
输出:
2.列表删除:【del、pop、remove】
1.del:指定位置删除
movie = [11,22,33,44]
print("----------增加前----------")
for name in movie:
print(name)
del movie[2]
print("----------增加后----------")
for name in movie:
print(name)
2.pop:弹出末尾最后一个元素。
movie = [11,22,33,44]
print("----------增加前----------")
for name in movie:
print(name)
movie.pop()
print("----------增加后----------")
for name in movie:
print(name)
3.remove:直接删除指定内容的元素。
注意:使用remove时若内容重复则删除顺序第一个指定元素。
movie = [11,22,33,44]
print("----------增加前----------")
for name in movie:
print(name)
movie.remove(33)
print("----------增加后----------")
for name in movie:
print(name)
3.列表更改:
1.直接指定下标进行修改:
namelist = [11,22,33,44]
print("----------增加前----------")
for name in namelist:
print(name)
namelist[1] = "555"
print("----------增加后----------")
for name in namelist:
print(name)
4.列表查找
1.用 if … in(或者 not in) 语句查找:
namelist = ["11","22","33","44"]
findname = input("please input name ")
if findname in namelist:
print("you found it!")
else:
print("you donnot found it ~ ")
2.index查找:可以查找指定下标范围的元素,并返回对应下标。 并且找不到会报错。
格式:a.index(“查找元素”,起点,终点) #范围区间左闭右开
a = ["a","b","c","a","d"]
print(a.index("a",1,4))
3.count查找:统计元素出现次数
a = ["a","b","c","a","d"]
print(a.count("a"))
5.列表排序
1.reverse:列表反转
a = [1,4,2,3]
print(a)
a.reverse()
print(a)
2.sort:排序(升序和降序)
a = [1,4,2,3]
print(a)
a.sort()
print(a)
a.sort(reverse=True)
print(a)
6.列表嵌套
school = [["大学1.1","大学1.2"],["大学2.1","大学2.2"],["大学3.1","大学3.2"]]
print(school[0])
print(school[0][0])
练习:随机将八个老师分配到三个办公室中
import random
offices = [[],[],[]]
names = ["A","B","C","D","E","F","G","H"]
for name in names:
index = random.randint(0,2) #这里是左右都闭
offices[index].append(name)
#显示-------------------------------------
i=1
for office in offices:
print("办公室 %d 的人数为 %d "%(i,len(office)))
i += 1
for name in office:
print("%s"%name,end = "\t")
print("\n")
print("-"*20)
输出:
元组(Tuple)——python的核心数据类型
1.tuple 与 list 类似,但tuple的元素不能修改。tuple 写在小括号里面,元素之间用逗号 隔开。
tup1 = (50)
tup2 = (50,)
print(type(tup1))
print(type(tup2))
2.tuple 的元素虽然不可修改,但可包含可变对象,如 list 。
3.定义一个只有单个元素的 tuple ,必须加逗号。
元组与列表的相同用法:
tup1 = ("abc","def",2000,2020,333,444,555,666)
print(tup1[0]) #访问第一个
print(tup1[-1]) #访问最后一个
print(tup1[1:5]) #切片,访问第1,2,3,4个
元组的增、删、改、查
增:新增元组实现增加
'''
tup1 = (12,34,56)
tup1[0] = 100
'''
#直接修改是不型的
tup1 = (12,34,56)
tup2 = ("abc","xyz")
tup = tup1 + tup2 #表面是增加元素,其实是新增了一个元组
print(tup)
删:只能删除整个元组
tup1 = (12,34,56)
print(tup1)
del tup1 #这里的删除是把整个元组删除而不是像列表一样清空里面的元素
print("删除后:")
print(tup1) #结果会报错
所以 元组不能进行元素的删除,只能进行整个元组的删除 。
改:不允许修改,会报错
查:即直接访问的方式,同上如下:
tup1 = (12,34,56)
print(tup1)
del tup1 #这里的删除是把整个元组删除而不是像列表一样清空里面的元素
print("删除后:")
print(tup1) #结果会报错
元组的常用操作:
字典(dict)
1.字典是无序的对象集合,使用键-值( key-value )存储,具有极快的查找速度
2.键(key)必须使用不可变类型
3.同一个字典中,键必须是**唯一**的
字典的访问
#字典的定义:
info = {"name":"吴彦祖","age":18}
#字典的访问
print(info["name"])
print(info["age"])
#访问不存在的键:
print(info["张少春"])
print(info.get("张少春"))
#使用 get 访问,没有找到则会返回一个 None
小总结:
#字典的定义:
info = {"name":"吴彦祖","age":18}
#字典的访问
print(info["name"])
print(info["age"])
#直接访问不存在的键会报错,但当我们要访问多个元素,其中有些在字典中存在,有些不存在,那么我们可以给没有的那些一个默认值
print(info.get("张少春"))
#使用 get 访问,没有找到则会返回一个 None
#直接访问会报错,但当我们要访问多个元素,其中有些在字典中存在,有些不存在,那么我们可以给没有的那些一个默认值:”没找到“
print(info.get("张少春","没找到"))
字典的增:
info = {"name":"吴彦祖","age":18}
newID = input("please input")
info["id"] = newID
print(info["id"])
字典的删除:del、clear
1.del:
info = {"name":"吴彦祖","age":18}
print("before: %s"%info["name"])
del info["name"]
print("after: %s"%info["name"])
删除指定键-值对(或字典),报错:没有找到“name”。所以用 del进行删除操作的时候 会直接将整个 键-值对(或字典) 删除。
2.clear:将字典中的 内容清空 但不删除字典。
info = {"name":"吴彦祖","age":18}
print("before: %s"%info)
info.clear()
print("after: %s"%info)
字典的更改:
info = {"name":"吴彦祖","age":18}
info["age"]=20
print(info["age"])
输出:20
字典的查找:
访问和遍历:
info = {"id":1,"name":"吴彦祖","age":18}
print(info.keys()) #得到所有的键(列表形式)
print(info.values()) ##得到所有的值(列表形式)
print(info.items()) #得到所有的项(列表形式),每个键值对是一个元组
#遍历所有的键值对
for key,value in info.items():
print("key = %s ,value = %s"%(value,key))
用枚举函数同时拿到列表中的下标和元素内容:
mylist = ["a","b","c","d"]
for i,x in enumerate(mylist):
print(i,x)
字典的一些其它操作:
* 集合(set)
1.set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。 可以理解为把字典里的键单独拿出来形成的一种数据结构。
集合可以去重:
常用的操作:
小总结:
类型 | 是否有序 | 是否可变类型 |
---|---|---|
列表[] | 有(可以通过下标来访问) | 可 |
元组() | 有 | 不可(内容、类型都不可) |
字典{} | 无(键之间) | key不可变value可(通过键的查询更改) |
集合{} | 无 | 可(不重复) |
函数
普通函数的定义和调用:
#函数的定义
def printinfo():
print("----------------")
print(" life is like a leaf in the wind ")
print("----------------")
#函数的调用
printinfo()
printinfo()
带参数的函数
#带参数的函数
#define
def add2num(a,b):
c = a + b
print(c)
#call
add2num(11,22)
输出:33
带返回值的函数
返回一个值的函数
#带返回值的函数
def add2num(a,b):
return a+b #通过return返回运算结果
add2num(11,22) #这样结果没有输出任何东西
#要输出正确结果的第一种:
print(add2num(11,22))
#要输出正确结果的第二种:
result = add2num(11,22)
print(result)
返回多个值的函数
#返回多个值的函数
def divid(a,b):
shang = a/b
yushu = a%b
return shang,yushu #多个返回值用 , 分开
sh,yu = divid(5,2)
print("商:%d,余数:%d"%(sh,yu))
练习
1.打印一条横线的函数:
def line():
print("----------")
line()
2.写一个函数,可以通过输入的参数,打印出自定义行数的横线。(调用上一题的函数)
方法一:用for循环
n = input("please input number")
def line():
print("----------")
i=0
for i in range(0,int(n)):
line()
方法二:函数调用函数:
#打印一条横线的函数
n = input("please input")
def line():
print("----------")
def numline(num):
i = 0
while i<num:
line()
i += 1
numline(int(n))
3.利用函数求三个数的和
#求三个数的和
def sum3(a,b,c):
return a+b+c
print(sum3(1,2,3))
输出:6
4.求三个数平均值
#求三个数的和
def sum3(a,b,c):
return a+b+c
print(sum3(1,2,3))
#求三个数平均值
def aver3(a,b,c):
sum=sum3(1,2,3)
aver=sum/3
return aver
print("average = %d"%aver3(1,2,3))
局部变量和全局变量
#全局变量和局部变量
#局部
'''
def test1():
a=300 #局部变量
print("test1----------修改前:a = %d"%a)
a=100
print("test1----------修改后:a = %d"%a)
def test2():
a=500 #也是局部变量,不同函数可以定义相同的名字,彼此无关
print("test2----------a = %d" % a)
test1()
test2()
'''
#全局:整个文档到处都可以访问
'''
a=100 #全局变量
def test1():
print(a)
def test2():
print(a)#调用全局变量 a
test1()
test2()
'''
#全局变量和局部变量名字相同
a = 100
def test1():
a=300 #局部变量
print("test1----------修改前:a = %d"%a)
a=200
print("test1----------修改后:a = %d"%a)
def test2():
print("test2----------a = %d" % a)
test1()
test2()
局部变量 :只在各自的函数中有效,且 不同函数的同名局部变量彼此无关
def test1():
a=300 #局部变量
print("test1----------修改前:a = %d"%a)
a=100
print("test1----------修改后:a = %d"%a)
def test2():
a=500 #也是局部变量,不同函数可以定义相同的名字,彼此无关
print("test2----------a = %d" % a)
test1()
test2()
全局变量: 整个文档到处都可以访问
a=100 #全局变量
def test1():
print(a)
def test2():
print(a)#调用全局变量 a
test1()
test2()
输出: 100 100
全局变量与局部变量同名且共存时
局部变量优先;
若要在局部中修改全局的变量内容时应在其前加上 global :
global a
a = 100
def test1():
a=300 #局部变量
print("test1----------修改前:a = %d"%a)
a=200
print("test1----------修改后:a = %d"%a)
def test2():
print("test2----------a = %d" % a)
test1()
test2()
文件操作
文件打开与关闭
文件的打开
可以使用 open 函数打开文件(若文件存在则正常打开,不存在则创建一个新文件。
f = open("text.txt","w") #w(写入模式)若不存在则新建一个文件
访问文件的模式
访问模式 | 说明 |
---|---|
r | 以只读方式打开文件(读不到就报错),文件的指针将会放在文件的开头,这是默认模式 |
w | 打开一个文件只用于写入。若该文件已存在则将其覆盖,若不存在则新建 |
a | 打开一个文件用于追加。若该文件已存在,新的内容将会被写入到已有内容之后,若不存在,新建文件进行写入 |
rb | 以二进制格式打开一个文件用于只读,指针放在开头,这是默认模式 |
wb | 以二进制打开一个文件只用于写入,若该文件已存在则将其覆盖,若不存在则新建 |
ab | 以二进制格式打开一个文件用于追加,如果该文件已存在,新的内容将会被写到已有内容之后,若不存在,新建文件并写入 |
r+ | 打开一个文件用于读写,文件指针会放在开头 |
w+ | 打开一个文件用于读写,若该文件已存在则将其覆盖,若不存在则新建 |
写入文件内容
f = open("text.txt","w") #w(写入模式)若不存在则新建一个文件
f.write("hello world i am here")
读取文件内容
1.按字符数读
f = open("text.txt","r")
content = f.read(5) #5个字母
print(content)
content = f.read(5)
print(content)
f.close()
read函数并不是每次都从开头读取,而是从上一次刚好没读到的地方开始读取。
**2.按行数读:**readlines()
一次性读取全部文件为列表,每行一个字符串元素。
f = open("text.txt","r")
content = f.readlines()
print(content)
i = 1
for temp in content:
print("%d:%s"%(i,temp))
i+=1
f.close()
*文件的重命名
import os
os.rename("text.txt","text+++.txt")
*文件的删除
import os
os.remove("text.txt")
*创建文件夹
import os
os.mkdir("学习笔记")
*获取当前目录
import os
os.getcwd()
*改变默认目录
import os
os.chdir("../")
*获取目录列表
import os
os.listdir("./")
*删除文件夹
import os
os.rmdir("学习笔记")
错误与异常
异常简介
print("test1--------------------")
open("123.txt","r")
print("test2--------------------")
运行结果
说明:打开一个不存在的文件 123.txt 当找不到它的时候,就会给出一个FileNotFoundError类型的错误(没有123.txt这样的文件或目录)。
异常:当python检测到一个错误是,解释器就无法继续执行了,出现一些错误的提示,这就是”异常“
捕获异常
try —— except 语句
不显示except后面的错误
try:
print("test1-------")
open("123.txt","r")
print("test2-------")
except IOError:
pass
捕获多个异常的方法
try:
print("test1----------")
open("123.txt","r") #若该文件不存在则会产生IOError错误
print("test2----------")
print(num) #若num变量没有定义,会产生NameEror错误
except (IOError,NameError):
#利用元组的方式一次性捕获多个错误
小练习:(finally的用法)
1.通过python新建一个文件:gushi.txt ,选择一首古诗写入文件中
2.另写一个函数,读取指定文件 gushi.txt ,将内容赋值到 copy.txt 中,并在控制台输出”复制完毕“。
3.提示:分别定义两个函数,完成读文件和写文件的操作。
#1.通过python新建一个文件:gushi.txt ,选择一首古诗写入文件中
#2.另写一个函数,读取指定文件 gushi.txt ,将内容赋值到 copy.txt 中,并在控制台输出”复制完毕“。
#3.提示:分别定义两个函数,完成读文件和写文件的操作。
def writefile(gushi): #写古诗的函数
f = open("gushi.txt","w",encoding="utf-8")
for i in gushi:
f.write(i)
f.write("\n")
f.close()
def readfile(): #复制古诗的函数
f = open("gushi.txt","r",encoding="utf-8")
copy1 = f.readlines()
f.close()
f = open("copy.txt","w",encoding="utf-8")
for i in copy1:
f.write(i)
f.write("\n")
f.close()
str = [""" #古诗内容
静夜思
李白
床前明月光,疑是地上霜。
举头望明月,低头思故乡。
"""
]
try:
writefile(str)
readfile()
except Expection as result:
print(result)
finally:
print("结束运行")
pass
[外链图片转存中...(img-gJxIfkr3-1645249950067)]
#### 捕获多个异常的方法
```python
try:
print("test1----------")
open("123.txt","r") #若该文件不存在则会产生IOError错误
print("test2----------")
print(num) #若num变量没有定义,会产生NameEror错误
except (IOError,NameError):
#利用元组的方式一次性捕获多个错误
小练习:(finally的用法)
1.通过python新建一个文件:gushi.txt ,选择一首古诗写入文件中
2.另写一个函数,读取指定文件 gushi.txt ,将内容赋值到 copy.txt 中,并在控制台输出”复制完毕“。
3.提示:分别定义两个函数,完成读文件和写文件的操作。
#1.通过python新建一个文件:gushi.txt ,选择一首古诗写入文件中
#2.另写一个函数,读取指定文件 gushi.txt ,将内容赋值到 copy.txt 中,并在控制台输出”复制完毕“。
#3.提示:分别定义两个函数,完成读文件和写文件的操作。
def writefile(gushi): #写古诗的函数
f = open("gushi.txt","w",encoding="utf-8")
for i in gushi:
f.write(i)
f.write("\n")
f.close()
def readfile(): #复制古诗的函数
f = open("gushi.txt","r",encoding="utf-8")
copy1 = f.readlines()
f.close()
f = open("copy.txt","w",encoding="utf-8")
for i in copy1:
f.write(i)
f.write("\n")
f.close()
str = [""" #古诗内容
静夜思
李白
床前明月光,疑是地上霜。
举头望明月,低头思故乡。
"""
]
try:
writefile(str)
readfile()
except Expection as result:
print(result)
finally:
print("结束运行")