由于从未系统学过python的相关知识,故今天将之前遗漏的部分内容,稍作补充
1.函数部分
1.字符串处理
去末尾空格 s.rstrip()
去头空格 s.lstrip()
去首尾空格 s.strip()
首字母大写 s.title()
2.乘方计算 用**表示
如
3**2 9
4**3 64
2.列表
name=['jian','xu','hao','miao','bin','zhen']
print(name[5])
print(name[-1])
name.append('ma')#末尾添加
name.insert(0,'na')#任意位置添加
del name[0]#删除第一个元素
a=name.pop(0)#弹出第一个元素,注意区分栈中的pop
name.remove('ma')#删除值为ma的元素(只删除第一个)
name.sort()#永久排序正序
name.sort(reverse=True)#倒序
sorted(name)#临时排序,注意区别
name.reverse()#反转列表
len(name)#长度
#遍历列表
for na in name:
print(na)
类似vector的概念,但不同的是可以支持负数访问,即name[-1],表示倒数第一个元素
range函数
for i in range(1,5)#i从1到4
numbers=list(range(1,5))#创建数字列表 numbers=[1,2,3,4]
numbers=list(range(2,11,2))#创建数字列表,步长为2numbers=[2,4,6,8,10]
a=min/max(numbers)
a=sum(numbers)
列表解析
squares=[value**2 for value in range(1,11)]
squares=[1,4,9...100]#建立平方列表
切片读取列表元素
name[a:b]读取a到b,a为起始下标,b为终止下标,均可省略
列表复制
name1=name[:]#这里必须使用切片,只有这样才会复制内容,否则只是引用关联
while 循环删除列表中的元素
pets=['cat','dog','cow','cat','dog']
while 'cat'in pets:
pets.remove('cat')
print(pets)
`` `
## 3.元组
与列表不同,元组是不可修改的一组元素
且定义用()
```python
numbers=(20,32)#元组的定义
4.逻辑判断
#and作用同&&
if a<8 and a>3
#or作用同||
if a>8 or a<3
#检验特定值是否存在于列表中
if '...' in name
if '...' not in name
#区别于c中的else if,python 使用elif
if condition1:
do1
elif condition2:
do2
...
else:
do n
5.字典
作用于map与class的结合近似,即键值对的形式
#简单定义与调用
people1={}#建立空字典
people1={'name':'ma','age':'18','sex':'male'}
print(people1['name'])
print(people1['sex'])
#添加
people1['hobby']='sda'
#删除
del people1['hobby']
#遍历一所有键值对
for key,value in people1.items():#key,value可以是任意变量名
print("key : "+key)
print("value : "+value)
#只遍历键
for key in people1.keys():
#也可不显式调用keys方法
for key in people1:
#顺序遍历
for key in sorted(people1.keys()):
#只遍历值
for value in people1.values():
为了避免重复,可用set去重
for value in set(people1.values()):for value in set(people1.values()):
#列表中存储字典
people[people1,people2,people3]
#字典中存储列表
people1={'name':'ma',
'hobby':['basketball','reading','run']
}
#在字典中存储字典
players={
'A':{'name':'ma',
'age':'18'
},
'B':{'name':'jack',
'age':'19'
}
}
for player,play_info in players.items():
print("player:"+player)
print(play_info['name']+" "+play_info['age'])
6.用户输入
#简单语法
message=input("please input: ")#input参数可空白
print(message)
需要注意的是input()输入的是字符串型变量,如果用于数值类的操作,需对其进行强制类型转化
a=input()
a=int(a)
7.函数
定义格式:def 函数名(参数1,参数2、、、):
几点重要不同
1.关键字实参,在传递给函数的名称-值对。直接指出各个实参对应的形参
def desribes(name,age):
print(name)
print(age)
desribes('as','18')#普通调用
desribes(name='asa',age='19')#关键字调用
几种等效的函数调用
def desribes(name='as',age='0'):
print(name)
desribes('ma')
desribes(name='ma')
desribes('na','2')
desribes(name='na',age='2')
desribes(age='2',name='na')
传递列表
def desribes(names):
for name in names :
print(name)
names=['jack','john','kitty','julie']
desribes(names)
desribes(names[:])
这里列表有两种形式,但区别在于,第一种可以在函数中修改列表内容,传递的是原件,第二种即切片表示法,传递的是副本,不能修改原列表
传递任意数量的形参
用*来建立一个列表,传过来的参数就储存在列表中
def Students(*names):
for name in names :
print(name)
Students('sd','ds','dsf'...)
如果需要将位置实参与任意数量实参结合使用,则要把任意实参放在最后
即
def Students(number,*names):
Students(12,'ma'...)
任意数量的关键字实参:有时候在不知道传递给函数的是什么信息时,可以将函数编写为能够存储任意数量的键值对的形式
def Students(first,last,**student_info):
profile={}
profile['first']=first
profile['last']=last
for key,value in student_info.items():
profile[key]=value
print(profile)
Students('sd','ds',Location='Tai',sex='male')
将函数存储在模块中,以及模块的调用
#ppp.py模块
def Students(first,last,**student_info):
profile={}
profile['first']=first
profile['last']=last
for key,value in student_info.items():
profile[key]=value
print(profile)
#ptest.py 调用
1.
import ppp
ppp.Students('ms','ss',Location='sd')
2.为 ppp重命名
import ppp as p
p.Students('ms','ss',Location='sd')
3.调用函数
from ppp import Students
Students('ms','ss',Location='sd')
4.
from ppp import Students as S
S('ms','ss',Location='sdS')
5.使用*导入所有函数,而非模块全部内容,避免冲突
from ppp import *
Students('ms','ss',Location='sdS')
注意:编写函数最好使用描述性名称,尽量使用小写字母以及下划线
给实参指定默认值时,等号两边要避免空格
8.类
基本形式
class Dog():
def __init__(self,name,age):
self.name=name
self.age=age
def back(self):
print(self.name+" : wang"+)
def rool(self):
print(self.name.title()+" rolled over")
其中__init__相当于c中的构造函数
实例化
my_dog=Dog('bb', 2)
my_dog.back()
其他方法和变量的调用与c++一致,不再说明
继承 ***
class Animal():
def __init__(self,name,age):
self.name=name
self.age=age
class Food():
def __init__(self,food):
self.food=food
def printfood(self):
return self.food
class Dog(Animal):
def __init__(self,name,age):
super().__init__(name,age)#super()是一个特殊的函数,用以将子类与父类(也称超类)关联起来
self.sound='wang'#添加新属性
self.food=Food('bone')#将实例类用作属性
def back(self):
print(self.name+" : "+self.sound)
def rool(self):
print(self.name.title()+" rolled over")
def eat(self):
print(self.name+" eats "+self.food.printfood())
my_dog=Dog('bb', 2)
my_dog.eat()
类的导入
同函数模块部分一样,类的导入有多种形式,下面以Car/Electriccar/Battery三类给出几种方法给出几种方法
1.导入单个类 from car import Car
2.在一个含多个模块的类中导入类
from car import Electriccar(Car的子类)
3.导入整个模块
import car
补充-类的编码风格
1.类名采用驼峰命名法——类名中每个单词首字母大写,不适用下划线,实例名和模块名均使用小写,使用下划线
2.每个类后,最好包含一个文档字符串以解释类的作用
3.使用空行组织代码,类中方法用一个空行,模块中类的分隔则用两个空行
9.文件异常操作
使用with方法读取文件,有效避免了因close的错误使用造成的麻烦
with open('D:/pyfile/test.txt') as file:#返回一个句柄
data=file.read()
print(data)
逐行读取
with open('D:/pyfile/test.txt') as file:
for line in file:
print(line)
结果行间之间会出现两个空行,这是因为读取的文件时,每行的末尾会出现一个换行符,而print语句也会输出一个换行符
若取出这些空行,可用前面的line.rstrip()以清楚右面的空格,左面的空格可用strip
创建一个包含文件各行内容的列表
with open('D:/pyfile/test.txt') as file:
lines = file.readlines()
文件的几种打开方式
open('D:/pyfile/test.txt','r')#读取,默认
open('D:/pyfile/test.txt','w')#写入
open('D:/pyfile/test.txt','a')#附加 即将内容附加到末尾,而不覆盖原内容
异常处理
以a/b为例
a=input("please input a")
a=int(a)
b=input("please input b")
b=int(b)
try:
c=a/b
except Exception as err:#异常处理
print(err)
else:#try成功后执行操作
print(c)
存储数据:json 模块
存储与读取
dump与load函数
dump将内容序列化,并写入打开的文件中。
import json
numbers=[2,3,4,7,9]
filename='numbers.json'
with open(filename, 'w') as file:#存储数字列表
json.dump(numbers,file)
with open(filename, 'r') as file:#读取数字列表
numbers2=json.load(file)
print(numbers2)