1.认识python
在cmd中写python源代码:
- 先输入python,进入python环境
python
print("hello python") #按回车,就可以输入该语句
python
a=2 #按回车
print(a) #按回车,就可以输出a的结果
b=a+2 #按回车
print(b) #按回车,就可以输出b的结果
- 退出python环境:输入exit(),然后回车;或者Ctrl+z,回车。
- 执行文件夹里的python文件(后缀名是.py)
python
d: #文件在D盘中,输入d:然后回车,就进入d盘了
python python.py #输入python+文件名,就可以执行文件了,
#Tab键可以补全文件名
在pycharm中写代码:格式化输出
python
age=1
print("年龄是%d岁"%age)
age+=1
print("我今年的年龄是%d岁"%age)
age+=2
print("我今年的年龄是%d岁"%age)
print("我的名字是%s,我的国籍是%s"%("崔小玉","中国"))
name="周"
c="中国"
print("我的名%s,我的国%s"%(name,c))
#就记得 %d 和 %s 就行,整型和字符型;%f,浮点实数
补充几个小例子:
python
print("aaa","bbb","ccc") #这样写中间都空一个格
print("www","baidu","com",sep=".") #sep是分隔符
print("hello",end="") #end里什么都没有表示之间连接不换行
print(123,end="\t") #\t是制表符,往后缩进的
print("python",end="\n") #\n是换行
print("bai")
输入
python
password=input("请输入密码:")
print("刚刚输入的密码是:",password)
print(type(password)) #type()表示获取变量的类型
c=int(password) #int(),强制类型转换为int()整型
print(type(c),c)
2.判断语句和循环语句
判断语句
- if后之间加条件,然后冒号:
- 缩进一定要一致,if后可以跟好多语句,看缩进一致的为同一
- elif 条件:,最后else 后没有条件,直接加:
小案例:石头剪刀布
python
import random
print("请输入:剪刀(0),石头(1),布(2)")
a=int(input("你的输入为"))
b=random.randint(0,2) #生成随机整数,导入random,调用randint即可
print("随机生成数字为",b)
if (a==0 and b==0)or(a==1 and b==1)or(a==2 and b==2):
print("平局")
elif (a==0 and b==1)or(a==1 and b==2)or (a==2 and b==0):
print("我输了")
elif (a==0 and b==2)or(a==1 and b==0)or(a==2 and b==1):
print("我赢了")
# 与and; 或or; 非not
导入相应模块import
python
import somemodule #将整个模块somemodule导入
from somemodule import somefunction #从某个模块中导入某个函数
from somemodule import f1,f2,f3 #从某个模块中导入多个函数
from somemodule import \* #将某个模块中的全部函数导入
循环语句for
python
for i in range(5):
print(i)
#打印结果为012345每个数字都换行,默认范围都是从0开始
for i in range(1,10,3):
print(i)
#range表示范围,第一个是上限,第二个数字是下限,第三个数字是步长
#都包括上下限
#打印结果为147每个数字都换行
循环语句格式for
python
for 临时变量 in 列表或者字符串等:
循环满足条件时执行的代码
#demo
name="zjt"
for i in name:
print(i)
a=["aa","bb","cc","dd"]
for x in range(len(a)):
print(x,a[x])
#这种写法要求必须掌握 列表下标访问
循环语句while
python
i=0
while i<5 : #记住格式,后边用冒号
print("第%d次循环:"%(i+1),end=" ")
print("i=%d"%i)
i+=1
#1到100求和 while循环
sum=0
i=1
while i<=100 :
sum+=i;
i+=1
print("1到100的和为%d"%sum)
#1到100求和 for循环
sum=0
for i in range(101):
sum+=i
i+=1
print(sum)
拓展:while...else语句
python
i=0
while i<3 :
print("%d小于3"%i)
i+=1
else:
print("%d大于或等于3"%i)
#在条件语句为false时执行else语句块
break语句和continue语句和pass语句
- break语句可以跳出for和while的循环体
- continue语句跳过当前循环,之间进行下一轮循环
- pass是空语句,一般用做占位语句,不做任何事情
案例:打印九九乘法表,用for和while语句
python
#while循环
i=1
while i<10:
j=1
while j<=i:
print("%d*%d=%-2d"%(i,j,i*j),end=" ")
j+=1
print() #这样就是换行,不用\n了
i+=1
#for循环
for i in range(1,10): #从1开始,不包括10
for j in range(1,i+1):
print("%d*%d=%-2d"%(i,j,i*j),end=" ")
print()
3.字符串、列表、元组、字典
3.1字符串
- 可以用单引号、双引号、三个双引号来表示。
- 三引号是可以写多行语句,一次性输出。
- 建议都使用双引号来表示,方便
- 用\表示转义字符,(\')
- 字符串支持拼接、截取等多种运算
python
#字符串的截取
str="pingdingshan"
print(str)
print(str[0])
print(str[0:5])
print(str[1:10:2]) #[起始位置:结束位置:步进值]
print(str[:3]) #前边不写,默认从头开始
print(str[10:]) #后边不写,默认就是到最后
print(str+",你好") #字符串连接用加号
print((str+"\t") * 3) #乘号就是连着打印三次,str+几个空格,括起来,输出三次
print("hello\npython") #\n换行
print(r"hello\npython") #在字符串前边+r,\这个转义字符就失去作用了,原封不动打印出来输出内容,不论是单引号还是双引号
字符串的常见操作 或者 字符串函数。
网上可以直接搜。文档里也有。
序号 | 方法及描述 |
---|---|
1 | capitalize()将字符串的第一个字符转换为大写 |
2 | count(str, beg= 0,end=len(string)) 返回 str 在 string 里面出现的次数。 如果 beg 或者 end指定,则返回指定范围内 str 出现的次数 |
3 | find(str, beg=0, end=len(string)) 检测 str 是否包含在字符串中。 如果指定范围 beg 和 end,则检查是否包含在指定范围内,如果包含返回开始的索引值,否则返回-1 |
4 | isalpha() 如果字符串至少有一个字符并且所有字符都是字母,则返回 True, 否则返回 False |
5 | isdigit() 如果字符串只包含数字,则返回 True ,否则返回 False. |
6 | isnumeric() 如果字符串中只包含数字字符,则返回 True,否则返回 False |
7 | join(seq) 以指定字符串作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串 |
8 | len(string) 返回字符串长度 |
9 | lstrip() 截掉字符串左边的空格或指定字符。 |
10 | max(str) 返回字符串 str 中最大的字母。 |
11 | min(str) 返回字符串 str 中最小的字母。 |
12 | rstrip() 删除字符串字符串末尾的空格。 |
13 | split(str="", num=string.count(str)) num=string.count(str)) 以 str 为分隔符截取字符串,如果 num 有指定值,则仅截取 num+1 个子字符串 |
3.2列表list
- 列表可以完成大多数集合类的数据结构实现。列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表(所谓嵌套)。
- 列表是写在方括号 [ ] 之间、用逗号分隔开的元素列表。
- 列表索引值以 0 为开始值,-1 为从末尾的开始位置。
- 列表可以使用+操作符进行拼接,使用*表示重复。
python
#遍历
list0=[] #定义一个空列表
list1=["zhou","cui",9]
print(list1[0])
print(list1[2])
#for循环和while循环遍历列表内容
for name in list1:
print(name)
i=0
while i<len(list1):
print(list1[i])
i+=1
常用操作:增删改查
增操作:append()、extend()、insert()
python
#append()
list1=["zhou","cui",9]
list1.append("xiao")
print(list1) #打印结果:['zhou', 'cui', 9, 'xiao']
list2=[8,"yu"]
#list1.append(list2) #将一个列表作为一个整体,加入到列表末尾
#print(list1) #打印结果:['zhou', 'cui', 9, 'xiao', [8, 'yu']]
#extend()
list1.extend(list2) #将列表2中的每个元素,逐一追加到列表1中(扩展)
print(list1) #打印结果:['zhou', 'cui', 9, 'xiao', 8, 'yu']
#insert()
a=[0,1,"wang"]
a.insert(2,"li") #第一个表示下标,第二个表示插入的元素(对象)
print(a) #指定下标位置插入元素,打印结果:[0, 1, 'li', 'wang']
删操作:del()、pop()、remove()
python
a=[0,0,1,"wang"]
#del a[1] #在指定位置删除一个元素
#a.pop() #弹出末尾最后一个元素
a.remove(0) #直接删除指定内容元素(如果有重复数据,只删除第一个)
print(a)
改操作:直接修改指定下标的元素内容
python
a=[0,0,1,"wang"]
a[1]=3 #修改指定下标的元素内容
print(a)
查操作:在不在列表中 in ;not in
python
a=[0,3,1,"wang"]
b=int(input("请输入要查找的内容:")) #找数字,要强制转换为int类型,不然输入的都是字符串类型的
if b in a:
print("找到了")
else:
print("找不到")
#拓展一个查找的例子
a=[0,3,1,"wang"]
print(a.index("wang",2,4)) #可以查找指定下标范围的元素,并返回找到对应数据的下标。能找到返回下标,找不到就报错;范围区间左闭右开。
反转reverse()、排序sort()
python
a=[3,9,1,7]
print(a)
a.reverse() #反转
print(a)
a.sort() #升序
print(a)
a.sort(reverse=True) #降序
print(a)
列表的嵌套(列表可以当做一维数组,列表的嵌套当作二维数组)
python
a=[[],[],[]] #定义三个空列表
b=[["北京","上海"],["南京","天津","河北"],["青岛","哈尔滨"]]
print(b[0]) #打印结果:['北京', '上海']
print(b[1][0]) #打印结果:南京
应用:一个学校,有3个办公室,现在有8位老师等待工位的分配,请编写程序,完成随机的分配
python
import random
offices=[[],[],[]] #三间办公室,8个老师,随机分办公室
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()
print("-"*18)
作业:
现有商品列表如下:
1、products = [["iphone",6888],["MacPro",14800],["小米6",2499],["Coffee",31],["Book",60],["Nike",699]],需打印出以下格式:
------ 商品列表 ------ 0 iphone 6888 1 MacPro 14800 2 小米6 2499 3 Coffee 31 4 Book 60 5 Nike 699
2、根据上面的products列表写一个循环,不断询问用户想买什么,用户选择一个商品编号,就把对应的商品添加到购物车里,最终用户输入q退出时,打印购买的商品列表。
python
#作业1
products=[["iphone",6888],["MacPro",14800],["小米6",2499],["Coffee",31],["Book",60],["Nike",699]]
print("------\t商品列表\t------")
i=0
for p in products:
print("%d\t%s\t%s"%(i,p[0],p[1]))
i+=1
#作业2
products=[["iphone",6888],["MacPro",14800],["小米6",2499],["Coffee",31],["Book",60],["Nike",699]]
carts=[]
print("------\t商品列表\t------")
while True:
wen=input("请问您想买什么?")
if wen=="q":
break
else:
wen_index=int(wen) #将用户输入的商品编号换成整数
carts.append(products[wen_index]) #将用户选择的商品编号对应的整个商品信息添加到 carts 列表中。
i=0
for cart in carts:
print("%d\t%s\t%s"%(i,cart[0],cart[1]))
i+=1
3.3元组Tuple
- tuple与list类似,不同之处在于tuple的元素不能修改。
- tuple写在小括号里,元素之间用逗号隔开。
- 元组的元素不可变,但可以包含可变对象,如list。
- 注意:定义一个只有1个元素的tuple,必须加逗号。
元组的定义与访问
python
tup0=() #定义了一个空元组
#tup1=(1) #<class 'int'>
tup1=(1,) #<class 'tuple'>
print(type(tup1)) #不加逗号,类型为整型;加逗号,类型为元组
#元组的访问
tup1=(1,2,9,4,0)
tup2=("wnag","li","zhou")
print(tup1)
print(tup1[2]) #通过下标访问
print(tup2[0:4]) #切片,左闭右开
#元组的连接组合
tup1=(1,2,9,4,0)
tup2=("wnag","li","zhou")
tup3=tup1+tup2
print(tup3)
#元组的删除
tup1=(1,2,9,4,0)
tup2=("wnag","li","zhou")
print(tup1)
del tup1 #只能删除整个元组,不能删除元组部分内容
print(tup1) #删除之后再访问,会报错
常用操作
- 访问:直接通过下标访问。
- 遍历元组,可以用for循环
- 切片:[ : : ],上限;下限;步长值
- 元组合并(组合)
- 元组成员关系:在不在元组里,用in
- 得到重复元组数量:tup1.count(1)
- 获取长度len()、最大值max()、最小值min()、强制类型转换tuple()
3.4 字典dict
- 字典是无序的对象集合,使用键-值(key-value)存储,具有极快的查找速度。
- 键(key)必须使用不可变类型
- 同一个字典中,键(key)必须是唯一的。
字典的定义 和 根据键访问值
python
d={"name":"吴彦祖","age":18}
print(d["name"])
print(d["age"])
#访问不存在的键
print(d["sex"]) #直接访问会报错
print(d.get("sex")) #使用get方法,没有找到对应的键,默认返回None
print(d.get("sex","m")) #没找到的时候可以设定默认值
增、删、改、查
python
#增
d={"name":"吴彦祖","age":18}
id=input("输入一个id:")
d["id"]=id
print(d.get("id"))
#删 del 、 clear
d={"name":"吴彦祖","age":18}
print(d["name"])
del d["name"]
del d #也可以全部删除
#print(d["name"]) #删除指定键值对后,再次访问会报错
d.clear()
print(d) #clear() 清空内容,打印结果:{}
#改
d={"name":"吴彦祖","age":18}
d["age"]=30 #直接根据键修改值即可
print(d)
#查
d={"name":"吴彦祖","age":18,"sex":"man"}
print(d.keys()) #得到所有的键(列表形式)
print(d.values()) #得到所有的值
print(d.items()) #得到所有的项,每个键值对是一个元组
#遍历所有的键
for i in d.keys():
print(i)
#遍历所有的键值对
for i,j in d.items():
print("%s %s"%(i,j))
#使用枚举函数,同时拿到列表中的下标和元素内容(拓展)
lists=["a","b","c","d","e"]
for i,x in enumerate(lists):
print(i,x)
3.5 集合set
不是重点,简单过一下。
- set和dict类似,也是一组key的集合,但不存储value。
- 由于key不能重复,所以,在set中,没有重复的key。
- set是无序的,重复元素在set中自动被过滤。
python
s=set([1,2,"wang"])
print(s) #打印结果:{1, 2, 'wang'}
s=set([1,1,2,2,"wang"])
print(s) #打印结果:{1, 2, 'wang'} 过滤掉重复元素
常用操作:
- 遍历,for循环
- 添加add、移除remove、弹出pop、清除clear、删除集合del
总结
是否有序 | 是否可变类型 | |
---|---|---|
列表[ ] | 有序 | 元素类型可变,可以是int可以是str,可以通过下标访问 |
元组( ) | 有序 | 不可变,内容不可改,改了报错 |
字典{ } | 无序(键顺序,无序) | key不可变,val可变 |
集合{ } | 无序 | 值可变(不重复) |
4.函数
函数概念
如果在开发程序时,需要某块代码多次,但是为了提高编写的效率以及代码的重用,所以把具有独立功能的代码块组织为一个小模块,这就是函数。
函数的定义、调用、带参数的函数、带返回值的函数、返回多个值的函数
python
#函数的定义
def printinfo():
print("1111111")
#函数的调用
printinfo()
#带参数的函数
def addn(a,b):
c=a+b
print(c)
addn(2,5)
#带返回值的函数
def addn(a,b):
return a+b
#print(addn(2,8))
c=addn(2,8)
print(c)
#返回多个值的函数
def divide(a,b):
shang=a/b
yushu=a%b
return shang,yushu #多个返回值,中间用逗号分隔
sha,yu=divide(5,2) #需要多个值来保存返回内容
print("shang=%d,yushu=%d"%(sha,yu))
课堂练习
- 写一个打印一条横线的函数。(提示:横线是若干个"-"组成)
- 写一个函数,可以通过输入的参数,打印出自定义行数的横线。(提示:调用上面的函数)
- 写一个函数求三个数的和
- 写一个函数求三个数的平均值(提示:调用上面的函数)
python
#1、
def p():
print("-"*15)
p()
#2、
i=int(input("需要打印几行横线:"))
while i:
p()
i-=1
#3、
def add(a,b,c):
return a+b+c
#print(add(1,2,3))
#4、
def ave(a,b,c):
sum=add(a,b,c)
c=sum/3
return c
print(ave(1,2,3))
全局变量和局部变量
- 在函数外边定义的变量叫做 全局变量
- 全局变量能够在所有的函数中进行访问。
- 如果在函数中修改全局变量,那么就需要使用
global
进行声明,否则出错。 - 如果全局变量的名字和局部变量的名字相同,那么使用的是局部变量的,小技巧:强龙不压地头蛇。
5、文件操作
文件,就是把一些数据存放起来,可以让程序下一次执行的时候直接使用,而不必重新制作一份,省时省力。
文件的打开、关闭、读写操作
python
f=open("test.txt","w") #打开文件,w(写模式),文件不存在就新建,新建在项目里
f.write("hello cxy zjt") #将字符串写入文件中
f.close() #关闭文件
#a是内容追加的写,w是内容覆盖的写
f=open("test.txt","a")
f.write("\nhhhhhhhhh")
f.close()
#read方法,读取指定的字符,开始时定位在文件头部,每执行一次向后移动指定字符数
f=open("test.txt","r")
content=f.read(5)
print(content)
content=f.read(5)
print(content)
f.close() #记得关闭文件
#readlines方法
f=open("test.txt","r")
content=f.readlines() #一次性读取全部文件为列表,每行一个字符串元素
print(content)
i=1
for temp in content:
print("%d:%s"%(i,temp))
i+=1
f.close()
#readline方法,每次读一行
f=open("test.txt","r")
content=f.readline() #每次读一行
print(content)
content=f.readline()
print(content)
f.close()
文件的相关操作
有些时候,需要对文件进行重命名、删除等一些操作,还有创建文件夹、获取当前目录、改变默认目录、获取目录列表、删除文件夹。python的os模块中都有这么功能
python
import os #需要导包,调用里边的方法
os.rename("test.txt","test1.txt")
6、错误与异常
异常
当Python检测到一个错误时,解释器就无法继续执行了,反而出现了一些错误的提示,这就是所谓的"异常"。
python
#把可能出现问题的代码,放在try中
#把处理异常的代码,放在except中
try:
print("123.txt","r") #不存在这个文件
except IOError:
pass
#except可以捕获多个异常
try:
open("2.txt","r") #如果123.txt文件不存在,那么会产生 IOError 异常
print(num) #如果num变量没有定义,那么会产生 NameError 异常
except (IOError,NameError): #如果想通过一次except捕获到多个异常可以用一个元组的方式,即加括号,逗号隔开
pass
#捕获所有的异常,用Exception。打印异常信息:
try:
open("a.txt")
except Exception as result: #捕获所有异常,并且存储异常信息
print(result) #输出异常信息
try...finally...
在程序中,如果一个段代码必须要执行,即无论异常是否产生都要执行,那么此时就需要使用 finally。 比如文件关闭,释放锁,把数据库连接返还给连接池等等。
python
import time
try:
f = open('test.txt')
try:
while True:
content = f.readline()
if len(content) == 0:
break
time.sleep(2)
print(content)
except:
#如果在读取文件的过程中,产生了异常,那么就会捕获到
#比如 按下了 ctrl+c
pass
finally:
f.close()
print('关闭文件')
except:
print("没有这个文件")
作业
- 应用文件操作的相关知识,通过Python新建一个文件gushi.txt,选择一首古诗写入文件中。
- 另外写一个函数,读取指定文件gushi.txt,将内容复制到copy.txt中,并在控制台输出"复制完毕"。
- 提示:分别定义两个函数,完成读文件和写文件的操作。尽可能完善代码,添加异常处理。