语法基础"/>
2019计算机项目部第三次部门培训——Python语法基础
文章目录
- 1、基础知识
- 1.1 变量和赋值语句
- 1.2 Python神奇之处1
- 1.3 输入和输出
- 2、列表、元组和字典(基本的数据结构)
- 2.1 通用的序列操作
- 2.1.1 索引
- 2.1.2 切片
- 2.1.3 调整步长
- 2.1.4 序列相加
- 2.1.5 in运算符(bool运算符)
- 2.2 列表
- 2.2.1 创建列表的方法
- 2.2.2 基本的列表操作
- 2.2.3 列表方法
- 2.3 元组
- 2.3.1 元组的创建
- 2.4 字典
- 2.4.1 创建字典的方法
- 2.4.2 基本的字典操作
- 2.4.3 字典方法
- 3、使用字符串
- 3.1 设置字符串的格式
- 3.2 字符串方法
- 4、语句
- 4.1 import语句
- 4.2 序列解包
- 4.3 条件语句
- 4.4 循环语句
- 4.4.1 while循环
- 4.4.2 for循环
- 4.4.3 其他语句
- 4.5 Python神奇之处2
- 5、函数
- 5.1 自定义函数的基本使用
- 5.2 关键字参数(不必考虑参数的位置,参数可指定默认值)
- 5.3 收集参数
- 5.4 分配参数
- 6、异常
- 6.1 一些内置的常用异常类
- 6.2 捕捉异常
- 7、文件操作
- 7.1 打开文件
- 7.2 读取和写入
- 7.3 with语句
- 7.4 小练习
- 8、作业
1、基础知识
1.1 变量和赋值语句
#使用Python变量前必须给它赋值,因为其无默认值
x=3
1.2 Python神奇之处1
#可同时给多个变量赋值
x,y,z=1,2,3
a=b=123#简单的多变量间值交换
a,b,c,d='a','b','c','d'
a,b,c,d=d,c,b,a
1.3 输入和输出
#输入语句:输入的值被input以字符串的形式返回给x
x=input("输入一个整数: ")#错误操作
#x=x*x#正确操作
x=int(x)*int(x)#输出语句
print('x: ',x)#输出语句拓展
print("Hello","World",sep="\n") #将print语句中的分隔符改为换行符(默认分隔符为空格)print('Hello,',end=' ') #将print语句中的结尾字符串指定为空格(默认为换行符)
print('World!')
2、列表、元组和字典(基本的数据结构)
最基本的数据结构为序列(如列表,元组和字符串)
序列中的每个元素都有编号(下标或索引)。
2.1 通用的序列操作
2.1.1 索引
#常规索引
greeting="Hello"
print(greeting[0])#负数索引
greeting="Hello"
print(greeting[-1]) #使用负数索引时,Python将从右(最后一个元素)开始往左数#索引拓展(如果函数调用返回一个序列,可直接对其执行索引操作)
twice=input("Name:")[2]
print(twice)
2.1.2 切片
用于提取序列的一部分,第一个索引是包含的第一个元素的下标,第二个索引是切片后余下的第一个元素的下标
string="I love ESTA!!"
s=string[2:6]
ss=string[-6:-2]
print(s)
print(ss)#sss=string[-6:0],若第一个索引指定的元素在第二个指定的元素后面,则结果为空序列#若要切片结束于序列末尾
sss=string[-6:]#同样,若要切片开始于序列开头
ssss=string[:6]
print(sss)
print(ssss)#表示整个序列
str=string[:]
2.1.3 调整步长
普通切片中,步长为1(隐式指定)
#调整步长为2
string="123456789"
str1=string[0:9:2]#步长为负数(不能为0),即从右向左提取元素
string="123456789"
str1=string[::-2]
2.1.4 序列相加
一般而言,只能拼接同类型的序列
str1=“Hello”+",world!"
str2=[1,2,3]+[4,5,6]
print(str1,str2,sep="\n")
2.1.5 in运算符(bool运算符)
用于检查特定的值是否包含在序列中;满足时返回True,不满足时返回False。
test="apple"
print('a'in test)
2.2 列表
列表:简单理解就是可变长度且元素可为任何数据的数组
2.2.1 创建列表的方法
#将任何序列(包括字符串)作为list的参数
l=list("Hello")#直接创建列表
ll=[1,2,3,4,5]
2.2.2 基本的列表操作
#删除元素
names=["Jason","Black","White"]
del names[2]
print(names)#给切片赋值1
name=list("Peter")
name[1:]=list("ython")
print(name)#给切片赋值2(用作插入和删除)
str=list("I love ESTA")
str[7:7]=list("HHUC ")
print(str)
str[7:12]=[]
print(str)
2.2.3 列表方法
#append:将一个对象附加到列表末尾
lst=list("EST")
lst.append('A')
print(lst)#clear:就地清空列表的内容
lst=list("ESTA")
lst.clear()
print(lst)#copy:复制列表(深拷贝)
a=[1,2,3]
b=a.copy() #区别于'='的浅拷贝
print(b)#reverse:逆序排列列表中的元素
lst=list("python")
lst.reverse()
print(lst)#sort:对列表就地排序
x=[1,9,4,5,2,7]
x.sort()
print(x)
其他常用的列表方法还有count、entend、index、insert、pop、remove等。
2.3 元组
元组:不能修改的序列
2.3.1 元组的创建
#将一些值用逗号分隔
a=1,2,3
print(a)#常用做法
a=(1,2,3)#调用函数tuple:它将一个序列作为参数,并将其转换为元组
a=tuple([1,2,3])
b=tuple("abc")
print(a,b,sep='\n')#特殊情况:表示只包含一个值的元组
a=42,
b=(42,)
print(a,b,sep='\n')
2.4 字典
字典:Python中唯一的内置映射类型,由键及相应的值组成,这种键-值对称为项;键不可重复,值可重复。
2.4.1 创建字典的方法
#使用函数dict从其他映射或键-值对序列创建字典
msg=[("name","Perl"),("age","18")]
d=dict(msg)
print(d["name"])
print(d)#使用关键字实参来调用函数dict
d=dict(name="Perl",age="18")
print(d)#直接创建
d={"Name":"Perl","Age":"18"}
print(d["Name"])#使用字典方法fromkeys:创建一个新字典,其中包含指定的键,且每个键对应的值为None
d=dict.fromkeys(["Name","Age","Sex"])
print(d)
#不使用默认值None
dict.fromkeys(["Name","Age","Sex"],"xxx")
2.4.2 基本的字典操作
d=dict(Name="White",Age="19",Sex="M",School="HHUC")
#返回字典包含的键-值(项)对数
length=len(d)
print(length)#修改键的值(或是自动创建一个新项)
d["School"]="HHU"
d["Profession"]="Computer Science"
print(d)#删除一个项
del d["Age"]#检查字典是否包含某个项(键)
boo="Name" in d
print(boo)
2.4.3 字典方法
#clear:就地删除所有的字典项
d=dict(Name="White",Age="19",Sex="M",School="HHUC")
d.clear()
print(d)#copy:返回一个新字典,其包含的项与原来的字典相同(浅复制,值本身为原件)
x={'name':'xxx','age':[18,19]}
y=x.copy()
y['name']='yyy' #替换不影响原件
y['age'].remove(18) #修改影响原件
print(x)
print(y)from copy import deepcopy
z=deepcopy(x) #深复制(同时复制键及其包含的值)
z['age'].append(18)
print(x)
print(z)#items:返回一个字典视图(字典视图可用于迭代),其中包含指定字典中的项
d=dict(Name="White",Age="19",Sex="M",School="HHUC")
print(d.items())#update:使用一个字典中的项来更新另一个字典(无则添加,有则替换它),使用方法和函数dict一样
d=dict(Name="White",Age="19",Sex="M",School="HHUC")
d.update(Address="ChangZhou")
print(d)
x=dict(Age="18")
d.update(x)
print(d)
其他常用的字典方法还有get、keys、pop、popitem、setdefault、values等。
3、使用字符串
3.1 设置字符串的格式
基本思想:对字符串调用方法format
举个例子:
str1="{1}{space}{0}{space}{be}{space}{name}".format("name","My",be="is",space=" ",name="Peter")
str2="My grade is {num:8.2f}".format(num=96.3356)
print(str1)
print(str2)
上述代码中花括号括起来的内容称为替换字段,替换字段由字段名、转换标志和格式说明符组成,每部分都是可选的。
字段名:索引或标识符,指出要设置哪个值的格式并使用结果来替换该字符,如上述代码中的"0",“space”,“be”,“name”,“num”。
格式说明符:跟在冒号后面的表达式,包括格式类型(如字符串、浮点数或十六进制数等)、字段宽度和数的精度;上述代码中str2中的"f"即是浮点数类型,“8"则代表字段宽度为8,”.2"代表浮点数精度为2。
3.2 字符串方法
#find:在字符串中查找子串。若找到则返回子串的第一个字符的索引,否则返回-1。
title="Monty Python's Flying Circus"
x=title.find('Python')
y=title.find('fly')
z=title.find('n',10,20) #指定起点和终点(均为可选),搜索范围依旧是左闭右开
print(x)
print(y)
print(z)#replace:将指定子串都替换为另一个字符串,并返回替换后的字符串
str="I is XXX".replace("is","am")
print(str)#join:合并序列的元素(序列的元素必须是字符串)并返回一个字符串
nums=list("12345")
plus='+'
expression=plus.join(nums)
print(expression)#split:将字符串拆分为列表,并返回拆分后的列表
#指定分隔符
expression="1+2+3+4+5"
nums=expression.split('+')
print(nums)
#未指定分隔符,将在单个或多个连续的空白字符(空格、换行符等)处进行拆分
str="I love\nESTA"
ss=str.split()
print(ss)
其他常用的字符串方法还有lower、upper、title、strip等。
4、语句
4.1 import语句
#导入一个模块
import somemodule(模块)
somemodule.somefunction() #调用该模块的某个函数#从模块中导入(一些)函数
from somemodule import somefunction[,anotherfunction,...]
somefunction() #导入模块中的一切函数
from somemodule import *
somefunction()#给模块指定别名
import somemodule as m
m.somefunction()#导入一个函数并指定别名
from somemodule import somefuntion as f
f()
4.2 序列解包
使用星号运算符(*)来收集多余的值,这样无需确保值和变量的个数相同;带星号的变量包含的总是一个列表。
#不同位置
a,b,*rest=[1,2,3,4]
print(rest)sentence="I love ESTA"
*first,last=sentence.split()
print(first)
first,*middle,last=sentence.split()
print(middle)
4.3 条件语句
视为假的布尔表达式:False、None、0、""、()、[]、{},其余值均被视为真。
age=int(input("请输入你的年龄:"))
if 0<=age<6:print("at a kindergarten")
elif 6<=age<=12:print("at primary school")
elif 12<age<=15:print("at a junior school")
elif 15<age<=18:print("at a high school")
else:print("be an adult")
4.4 循环语句
4.4.1 while循环
x=1
while x<=10:print(x,end=' ')x+=1
4.4.2 for循环
#迭代(遍历)列表
words=["this","is","an","apple"]
for word in words:print(word)#遍历特定范围的数(调用range函数,范围是左闭右开)
#打印0-100
for n in range(0,101,2): #range(0,101)等价于range(101)print(n,end=' ')#迭代字典
d=dict(Name="XXX",Age="18")
for key in d:print(key,"corresponds to",d[key])#排序后迭代(调用sorted函数,该函数适用任何序列或可迭代的对象,返回排序后的列表)
nums=[9,8,5,4,3,2,1]
for i in sorted(nums):print(i,end=" ")
除sorted之外,还可以调用一些内置函数帮助迭代序列;如调用函数zip()使用并行迭代,调用reversed进行反向迭代等。
4.4.3 其他语句
1、break语句,用法同C,C++
2、continue语句,用法同C,C++
3、pass语句,用作占位,不起任何作用
4.5 Python神奇之处2
#列表推导(从其他列表创建列表的方式)
l1=[x*x for x in range(10)]
print(l1)l2=[x*x for x in range(10) if x%3==0]
print(l2)l3=[(x,y) for x in range(5) for y in range(5) if x%2!=0 if y%2==0]
print(l3)girls=['alice','bernice','clarice']
boys=['chris','arnold','bob']
l4=[b+'+'+g for b in boys for g in girls if b[0]==g[0]]#字典推导
squares={i:"{} squared is {}".format(i,i**2) for i in range(10)}
print(squares)
5、函数
5.1 自定义函数的基本使用
def hello(name):return 'Hello, '+name+'!'
print(hello('world'))
5.2 关键字参数(不必考虑参数的位置,参数可指定默认值)
def hello(name,greeting='Hello',punctuation='!'):print('{},{}{}'.format(greeting,name,punctuation))
hello('MMS','Hi','^_^')
hello('MMS',punctuation='^_^')
hello('MMS',greeting='Glad to see you')
5.3 收集参数
#星号收集余下的位置参数并存放在一个元组中
def print_params1(title,*params):print(title,end=' ')print(params)
print_params1('Params:',1,2,3) #收集关键字参数需要**,得到的为一个字典
def print_params2(**params):print(params)
print_params2(x=1,y=2,z=3)
5.4 分配参数
#1、拆分序列*
def add(x,y):return x+y
params=1,2
print(add(*params))def mutiply(x,y,z):return x+y*z
params1=[2,3]
print(mutiply(1,*params1)) #星号部分必须位于参数列表末尾#2、拆分字典**
def hello(greeting="Hello",name='World'):print(greeting+',',name)
dic={'name':'MMS','greeting':'Glad to see you'}
hello(**dic)
6、异常
Python使用异常对象来表示异常状态,并在遇到错误时引发异常。异常对象未被捕获时,程序将终止并显示一条错误信息(Traceback)
#除数为0
1/0
6.1 一些内置的常用异常类
1、Exception:几乎所有的异常类都是从它派生而来的
2、AttributeError:引用属性或给它赋值失败时引发
3、IndexError:使用序列中不存在的索引时引发
4、NameError:找不到名称(变量)时引发
5、SyntaxError:代码不正确时引发
6、TypeError:将内置操作或函数用于类型不正确的对象时引发
7、ValueError:将内置操作或函数用于类型正确但包含的值不正确的对象
8、ZeroDivisionError:在除法或求模运算的第二个参数为0时引发
6.2 捕捉异常
#捕获异常1(打印一条错误信息)
try:x=int(input('Enter the first number: '))y=int(input('Enter the second number: '))print(x/y)
except ZeroDivisionError:print("The second number can't be zero")#捕获异常2(多个except子句,防止漏网之鱼)
try:x=int(input('Enter the first number: '))y=int(input('Enter the second number: '))print(x/y)
except ZeroDivisionError:print("The second number can't be zero")
except ValueError:print("That wasn't a number")#捕获异常3(一个except子句捕获多种异常,使用元组)
try:x=int(input('Enter the first number: '))y=int(input('Enter the second number: '))print(x/y)
except (ZeroDivisionError,ValueError,TypeError):print("Your numbers were invalid!")#捕获异常4(捕获异常对象本身,记录错误但程序继续运行)
try:x=int(input('Enter the first number: '))y=int(input('Enter the second number: '))print(x/y)
except (ZeroDivisionError,ValueError,TypeError) as e:print(e)#捕获异常5(捕获所有异常)
try:x=int(input('Enter the first number: '))y=int(input('Enter the second number: '))print(x/y)
except:print("Something wrong happened.")#捕获异常6(添加一个else子句,无异常时执行)
#仅当无异常时跳出循环,否则打印错误信息
while True:try:x=int(input('Enter the first number: '))y=int(input('Enter the second number: '))value=x/yprint('x / y is',value)except Exception as e:print(e)else:break#捕获异常7(不论try子句发生什么异常都将执行finally子句)
x=None
try:x=1/0
except Exception:print("Unknown Error")
else:print("No error")
finally:print("Cleaning up")del x
7、文件操作
7.1 打开文件
#打开当前目录中的一个文本文件(相对路径)
f=open("somefile.txt")#使用绝对路径打开
f=open("C://Users//MMS//Desktop//test.txt")
f=open("C:\Users\MMS\Desktop\test.txt")
常用的几个文件模式
1、‘r’:读取模式(默认值)
2、‘w’:写入模式
3、‘a’:附加模式
4、’+’:读写模式(与其他模式结合使用)
7.2 读取和写入
#写入
f=open('test.txt','w')
f.write("Hello, World")
f.close()#读取
f=open('test.txt','r')
print(f.read(5))
#读取完文件中剩余全部内容
print(f.read())
f.close()
7.3 with语句
with语句:在语句体中,你可以将数据写入文件(或其他操作);到达语句末尾自动关闭文件。
with open('test.txt','r') as f:print(f.read())
7.4 小练习
path=input("请输入你的桌面路径:")
with open(path+'timg.txt','rb') as f:str=f.read()
with open(path+'pikachu.jpg','wb') as ff:ff.write(str)
8、作业
读取Homework.txt中的内容,并用一个字典来统计(字典的键为出现的单词,值为该单词出现的次数),统计完毕后按照规定的格式输出。
规定的格式为:第一行是Vocabulary和Num,中间有一个英文空格;下面几行输出字典的键和值,要求键的末尾与Vocabulary对应,值的末尾与Num对应。
注:同一单词的不同形式当作不同单词来算,最长的键不会超过Vocabulary的长度。
Volcabulary Num doctoring 2 doctor 12
参考文献:Magnus Lie Hetland. Python基础教程(第3版). 人民邮电出版社
更多推荐
2019计算机项目部第三次部门培训——Python语法基础
发布评论