计算机项目部第三次部门培训——Python语法基础

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/y
        print('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版). 人民邮电出版社

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值