Python编程学习总结
- 一、python基础
- 1、python软件安装、环境配置
- 2、常用的字符编码集
- 3、数据类型
- 4、列表操作
- 5、字符串操作
- 6、字典
- 7、函数
- 8、类
- 二、常用包函数:numpy、pandas、matplotlib
- 三、实例
- 1、冒泡排序
- 2、爬楼梯
一、python基础
1、python软件安装、环境配置
Python 是一门面向对象的编程语言,最初由Guido van Rossum在八十年代末和九十年代初,在荷兰国家数学和计算机科学研究所设计出来的。 常用的编译器有:annaconda、pycharm、eclipse、Sublime Text、Visual Studio等。个人比较倾向于使用Annaconda及pycharm
2、常用的字符编码集
编码 | 时间 | 解释 |
ISO-8859-1 | – | 西欧字符集,单字节编码 |
ASCII | 1967年 | 单字节编码,用于现代英语和其他西欧语言 |
GB2312 | 1980年 | 双字节编码,国家简体中文字符集,兼容ASCII |
Unicode | 1991年 | 国际标准统一字符集,一般用2字节表示一个字符 |
UTF-8 | 1992年 | 可变长编码,编码成1-6字节,英文通常是1字节,中文是3字节 |
GBK | 1995年 | GB2312的扩展字符集,支持繁体字 |
3、数据类型
类型 | 特点 |
Numbers(数字) | int、float、complex、bool |
String(字符串) | 有序可改变集合,允许重复数据。 |
List(列表) | 有序不可改变集合,允许重复数据。 |
Tuple(元组) | 有序可改变集合,允许重复数据。 |
Dictionary(字典) | 无序无索引(索引为键值)集合,无重复数据。 |
Set(集合) | 无序,可变,有索引集合,无重复数据。 |
4、列表操作
变量的定义:变量是可以赋给值的标签,也可以说是变量指向特定的值。
变量的命名规则:只能包含字母、数字和下划线,不能包含空格及Python的关键字和函数名;变量名应既简短,又具有描述性;慎用小写字母l和大写字母O
列表:是由一系列按特定顺序排列的元素组成。
元组:python将不能修改的值称为不可变的,而不可变的列表称为元组。
元组是由逗号标识的,圆括号只是让元组看起来更整洁清晰;如果要定义只有一个元素的元组,必须在这个元素后面加上逗号,a=(3,) ;虽不能修改元组的元素,但可以给存储元组的变量赋值。
- 创建:直接创建、使用list指定范围创建
- 索引:指列表中元素的位置,第一个列表元素的索引为0.而不是1;通过将索引指定为-1,可以让其返回最后一个列表元素
- 修改:指定列表名和要修改元素的索引,再指定该元素的值。注:列表可修改,元组不可修改
- 添加:a.append() 可在列表末尾添加,a.insert(0,‘1’) 可指定索引和值
- 删除:使用del语句,del a[0] ;使用pop() 方法,a.pop(0) ; 根据值删除元素,a.remove(‘xx’)
- 排序:使用sort()方法对列表进行永久排序,使用sorted()方法对列表进行临时排序
- 切片: a[2:4],其中a,b表示要切分位置的索引
- 遍历:使用for循环对列表中的每个元素进行遍历,如,for city in citys:
- 计数:a.count() 方法
def my_list1():
a = [1, 2, 3, 4] # 列表的创建:直接创建
a = list(range(1, 5)) # 列表的创建:使用list指定范围创建
b = (1, 2, 3, 4)
b = tuple(range(1, 5)) # 元组的创建
print(a[0], a[-1]) # 列表索引:从零开始,-1表示最后位置,
print(a[1:3]) # 列表切分:[a:b],其中a,b表示要切分位置的索引
a[2] = 5 # 列表中的值可修改
b = [1, 2, 5, 4] # 元组中的值不可修改,只能对指向元组的变量重新赋值
print(b) # 元组不可修改,只可重新给变量赋值
c = sorted(a) # 列表排序:sorted 临时性排序,不会改变原始列表中的值
a.sort() # 列表排序:sort 永久排序,改变原始列表中值的顺序
print(a)
def my_list2():
a = ['北京','天津','深圳','上海']
a.append('北京') # 添加元素:append方法,在列表末尾添加元素
a.insert(2,'北京') # 添加元素:insert方法,可在列表指定位置添加元素
print(a)
del a[1] # 删除元素:del[0] 永久删除指定位置的元素
a.pop(0) # 删除元素:pop方法,
a.remove('北京') # 删除元素:remove,删除指定内容元素,但只可删除第一次出现的位置
while a.count('北京')>0: # 计数:count方法,返回列表中指定内容出现的次数
a.remove('北京')
for city in a: # 列表遍历:遍历列表中的每一个元素
if city == '北京':
a.remove('北京')
print(a)
5、字符串操作
字符串就是一系列字符。在Python中,用引号括起来的都是字符串,可以是双引号也可以是单引号。
常用操作有:
- 大小写:name.upper() 或name.lower() 方法
- f 字符串:f 是format的简称,可通过print(’{}’.format(mystr)) 的方式输出字符串
- 删除空白:strip() 、rstrip() 、lstrip() 可分别用于删除字符串两边、末尾和开头的空白
- 替换:mystr.replace(’ ‘,’’)
- 查询:返回查找内容的索引值,有 find 和 rfind
- 统计:str.count(‘xx’)
def my_str():
str1 = '今天天气真好, '
str2 = ' 很喜欢晴天的天气! '
mystr = str1 +str2 # 字符串拼接:直接相加
mystr = mystr.strip() # 只能剔除前后的空格
mystr = mystr.replace(' ','') # 替换:replace方法
print(mystr)
print('{}'.format(mystr)) # print两种方式
index = mystr.rfind('天气') # 查找:返回查找内容的索引值,有 find 和 rfind
print(index)
cnt = mystr.count('天气') # 统计个数:count方法
print(cnt)
6、字典
字典:字典是一系列键值对,每个键都与一个值相关联,可使用键来访问相关联的值。
- 创建:字典是一种动态结构,要添加键值对,可依次指明键值对,用方括号括起的键和相关联的值。
- 访问:使用get() 方法来访问值,a.get(‘name’)
- 遍历:for keys,values in a.items():,返回键值对; for keys in a.keys():返回键
- 嵌套:将一系列的字典存储到列表中,或将列表作为值存储到字典中。
def my_dict():
a = {'name':'张三', 'age':18, 'gender':'male'} # 字典的创建:方式一
a = dict(name = '张三', age = 18, gender = 'male') # 字典的创建:方式二,使用dict
key = ['name','age', 'gender']
value = ['张三', 18 ,'male']
a = dict(zip(key,value)) # 字典的创建:方式二,使用dict和列表
name = a.get('name') # 字典访问:使用get方法访问字典中的值
print(name)
for keys,values in a.items(): # 遍历字典中的关键字及键值
print(keys,':',values)
# 字典和列表嵌套
info = []
b = {'name': '李四', 'age': 19, 'gender': 'male'}
c = {'name': '王五', 'age': 20, 'gender': 'male'}
info.append(a)
info.append(b)
info.append(c)
return info
7、函数
函数定义:向Python指出了函数名,还可能在圆括号内指出完成任务需要什么样的信息,使用关键字def 来定义一个函数。
- 形参:函数完成工作所需要的信息
- 实参:调用函数时传递给函数的信息
- 位置实参:要求实参的顺序与形参的顺序相同
- 关键字参数:每个实参都由变量名和值组成,顺序可与形参不一致
- 列表和字典传参
- 传递任意数量的位置实参:*args
- 传递任意数量的关键字实参:**kwargs
def hello(info):
'''
形参:def hello(info)中的info
实参:主函数hello(info)中的info
'''
for a in range(len(info)):
print('Hello {}!'.format(info[a].get('name')))
def introdution(name='张三', age=18, gender='male'):
print('my name is {},{} years old, gender is {}!'.format(name, age, gender))
def get_naems(name):
for names in name:
print('hello {} !'.format(names.title()))
def get_naems2(*name):
for names in name:
print('hello {} !'.format(names.title()))
def introdution2(name='张三',**info):
print('my name is {}'.format(name))
for infomation in info:
print('{} is {}!'.format(infomation,info[infomation]))
if __name__ == '__main__':
info = my_dict()
hello(info)
introdution('张三', 18, 'male') # 位置参数
introdution(age= 19, name='李四',gender='male') # 关键字传参
introdution(name='李四') # 传递部分关键字参数,其他使用默认值
name = ['张三', '李四', '王五']
get_naems(name) # 传递列表
# 传递任意位置参数
get_naems2('张三', '李四','张三', '李四')
# 传递任意关键字参数
introdution2(name='张三', age =18, gender = 'male', xueli='大学')
8、类
- 面向对象编程:表示现实世界中的事物和情景的类,并基于这些类来创建对象。编写类时,定义一大类对象都有通用的行为。
- 创建对象:每个对象都自动具备这种通用行为,然后根据需要赋予每个对象个性。
- 创建和使用类:类中的函数称为方法,开头和末尾都有两个下划线。形参self必不可少,而且必须位于其他形参前面。每个实例相关联的方法调用都自动传递实参self,它是一个指向实例本身的引用,让实例能够访问类中的属性和方法。
class Info():
def init(self,name ,age, gender, xueli): - 继承:如果要编写的类是另一个类的特殊版本,可使用继承。一个类继承另一个类时,将自动获得另一个类的所有属性和方法,原有的类称为父类,新的类称为子类。
创建父类时,父类必须包含在当前文件中,且位于子类前面。定义子类时,必须在圆括号内指定父类的名称。super() 是一个特殊函数,能够调用父类的方法。
class Info():
'''
面向对象的编程语言:对象(数据和功能)、类、 方法、 继承、 重写
'''
def __init__(self,name ,age, gender, xueli):
'''
定义初始化函数,init表示一种方法
形参self必不可少,可自动传递
'''
self.name = name
self.age = age
self.gender = gender
self.xueli = xueli
def study(self):
print('{} 喜欢学习!'.format(self.name))
def sports(self):
print('{} 喜欢运动!'.format(self.name))
class Info2(Info):
def __init__(self,name ,age, gender, xueli, color):
super().__init__(name ,age, gender, xueli)
self.color = color
def cloth(self):
print('{} 衣服颜色是 {} !'.format(self.name, self.color))
def sports(self):
print('{} 不喜欢运动!'.format(self.name))
if __name__ == '__main__':
my_info = Info(name='张三', age =18, gender = '男', xueli='大学')
my_info.study()
my_info.sports()
my_info2 = Info2('李四', 19, '男', '高中','蓝色')
my_info2.study()
my_info2.cloth()
my_info2.sports()
二、常用包函数:numpy、pandas、matplotlib
- 读取文件:函数open() 接受的参数包含要打开文件的名称,关键字with在不需要访问文件后将其关闭。
- numpy:用来存储和处理大型矩阵
- pandas:用于解决数据分析任务
- matplotlib:可以生成绘图、直方图、条形图、散点图等
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
if __name__ == '__main__':
path = './data.txt'
'''
r:只读
w:写
a:末尾添加
r+:读写模式
'''
with open(path,'a') as data:
data.write('e 90')
data.write('\n')
with open(path, 'r') as data:
name = []
value = []
for line in data:
a,b = list(line.strip().split(' '))
name.append(a)
value.append(int(b))
print(name,value)
value = np.array(value)
print(value)
value2 = pd.DataFrame(value)
print(value2)
print(float(value2.sum()))
print(float(value2.mean()))
plt.plot(name,value)
plt.show()
三、实例
1、冒泡排序
def maopao(a):
for i in range(len(a)-1):
for j in range(len(a)-1-i):
if a[j] > a[j+1]:
temp = a[j]
a[j] = a[j+1]
a[j+1] = temp
return a
if __name__ == '__main__':
data = input()
a = list(data.split(' '))
for i in range(len(a)):
a[i] = int(a[i])
print('排序前:', a)
b = maopao(a)
print('排序前:', b)
2、爬楼梯
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意:给定 n 是一个正整数。
class Solution(object):
def climbStairs(self, n):
p,q,r = 0,1,2
if n<3:
return n
for i in range(3,n+1):
p,q = q,r
r = p + q
return r