记一次学习 Python 的笔记
本此课程所学的是在 Youtube 上面一位台湾老师所讲,感觉讲的很好,简明扼要又实用,所以记录下来。
一:简介、安装、快速开始
讲课老师所用的编辑器是 Visual Code ,感觉代码风格很好看
#第一个程式
print("Hello Python 3")
二:Python 变数与资料形态
1,数字:整数、长整数、浮点数(小数)
3456
3.5
2,字符串:任意文字内容
"中文"
"Hello world"
3,布尔值:True 、Fasle 开头要大些
True
False
4,可变列表(List)有循序可变动的资料集合
[3,4,5]
["Hello","world"]
5,固定列表(Tuple)使用和可变列表一样,但内容不可变化
(3,4,5)
("Hello","world")
6,集合:无顺序的资料合集 set
{3,4,5}
{"Hello","World"}
7,字典:键值对,类似于 php 数组 Dictionary
{"apple':"1","orange":"2"}
三:数字、字符串的基本运算
1,数字:
#数字运算 + - * / % 和 php 一样
#区别,整数除法,不会到小数
3 // 6 = 0
7 // 6 = 1
# x 的 y 次方
x ** y
#同样支援
x+=1 x-=1 x*=1
#字符串,单双引号、转义基本和 php 相同,拼接用 + 和空包字符
s = 'Hello' 'world'
s = 'Hello'+ 'world\n'
#三个双引号,类似于 php <<<EOF EOF;
s = """
Hello
world
"""
#特殊使用
s = "Hello" * 3 + "World"
print(s) # HelloHelloHelloworld
#索引与字元,字符串会对内部每个字元有编号,从 0 开始
s = "Hello"
print(s[0]) # H
print(s[0:1]) # H 这种写法包含开头不包含结尾
print(s[0:]) #匹配开头到结尾
print(s[:4])
四:有序列表 List 的运算
# List 有序可变列表
grades = [62,73,14,78,56]
print(grades)
print(grades[0])
print(grades[1:4])
print(grades[1:])
print(grades[:4]) #使用同字符串字元
grades[0] = 88 #赋值
grades[1:4] = [] #批量删除
grades = grades+[55,78] # 拼接组合到结尾
print(len(grades)) #列表长度类似于 php 中 count()
data = [[7,2,5],[2,6,35],55] #巢状列表,类似于 php 多维数组
print(data[0][2]) # 等于 php
data[0][0:2]=[5,5,5] #批量赋值
# Tuple 有序不可变列表,使用同上,唯一区别不同赋值(改变值)
(2,4,3,5)
五:集合、字典的运算
#集合 Set
s1 = {3,4,5}
print(3 in s1) #判断值是否在集合中,相反的判断的还有 not in
s1 = {2,4,5}
s2 = {4,5,6,7}
s3 = s1&s2 #交集:取出两个集合中相同的资料 {4,5}
s4 = s1|s2 #联集 取两个集合所有资料(去除重复的){2,4,5,6,7}
s5 = s1-s2 #差集 从 s1 中减和 s2 重叠的部分:只剩下 {3}
s6 = s1^s2 #反交集 取两个集合中不重叠的部分 {2,6,7}
s = set("Hello") #set(字符串),自动拆成集合,去除重复,并排序 {'l','H','e','o'}
#字典 键值对(key=>value)
dic = {"apple":"苹果", "bug":"虫子"}
print(dic["apple"])
dic["apple"] = "大苹果" #取值、赋值,和 php 一样
print("apple" in dic) #判断 key 是否包含,相反有 not in
del dic["apple"] #同时删除键值对
dic{x:x*2 for in [3,4,5]} #从列表的资料产生字典,输出 {3:6, 4:8 ,5:10}
六:流程控制 if 判断式
#简单程式
if 布尔值:
执行
elif 布尔值:
执行
else:
执行
#输入程式范例
x = input("请输入数字:")
x = int(x) #需要转换到整数类型,否则会报错,亦可写为 x = int(input("请输入数字:"))
if x > 200:
print("大于 200")
elif x > 200"
print("大于 100")
else:
print("小于 100")
#四则运算范例
n1 = int(input("请属于数字一:"))
n2 = int(input("请属于数字二:"))
op = input("请输入运算符号: + , -, *,/ :")
if op == "+":
print(n1 + n2)
elif op == "-"
print(n1 - n2)
elif op == "*"
print(n1 * n2)
elif op == "/"
print(n1 / n2)
else:
print("请属于正确的运算符号:")
七:流程控制,循环控制,while 、for
#程序范例
# while 循环
n = 1
while n < 5:
print("变量 n 的值是:", n)
n += 1
# for 循环
for x in [4,6,3]
print("x 的值为:", x)
#经常使用的 for
for var in range(6): #相当于 for var in [0,1,2,3,4,5],产生连续的列表
for var in range(3,6) #相当于 for var in [3,4,5]
#范例:1+2+3+...+1-
sum = 0
for x in range(1,11)
sum = sum + x
print(sum) #输出 55
八:循环进阶控制,break、continue、else、命令
#和 php 相同,但是多出一个 else(最后一次的执行)
# break 范例
n = 0
while n < 5:
if n == 3:
break
n += 1
print(n)
print("最后的值是:") #输出 0 1 2 ,最后的值是 3
#continue 的用法
n = 0
for x in [0,1,2,3]:
if x % 2 == 0:
continue
print(x)
n += 1
print("最后的值是:") #输出 1 3 ,最后的值是 2
#else 的范例
sum = 0
for n in range(11):
sum += n
else:
print(sum) #输出 55
#范例,找一个数的平方根
n = int(input("请输入一个整数:"))
for i in range(n):
if i * i == n:
print("整数平方根:",i)
break
else:
print("没有找到平方根")
九:函数(函式)
#定义函数,基本上和 php 相同
def name(参数)
print()
return result # 结束返回,也可以直接 return 结束(返回 None)
#函数没有 return 值,默认返回为 None
#程式范例
def say(msg):
print(msg)
return
#运行函数
value = say("Hello Funciton")
print(value) #打印为 None
#运算包装范例
def calculate(max):
sum = 0
for n in range(1,max + 1):
sum = sum + n # 55
print(sum)
十:函数的参数详解:参数预设值、名称对应、任意长度参数
#基本上和 php 相同,在此仅列出独特之处
#参数可以指定相同名称,然后会对应参数
def divide(n1, n2):
result = n1 / n2
print(result)
divide(2, 4) #输出 0.5
divide(n2=2, n1=4) #输出 2.0
#无限个参数
def infinite(*args):
print(args) #会以 (x,x,x,x) 这种打印
#参数会以 Tupele (不可变列表)形式
for v in args:
print(v)
infinite(3,4,5,6)
#示例:求平均数
def avg(*num):
sum = 0
for n in num:
sum = sum + n
print(sum/len(num))
avg(1,4,6,3)
十一:Module 模型的载入与使用
#基本语法
import 模块名称
import 模快名称 as alias(自定义别名)
#使用模块
#模块名称或别名.函数名称(参数) 或者是 模块名称或别名.变量名称
# 示例: sys 内置模块并使用别名
import sys as s
print(s.platform) #打印操作系统
print(s.maxsize) #打印整数类型的最大值
print(s.path) #打印查找模块的路径
#在相同的目录创建文件,并在中写多个函数,然后就可以使用
import 模块文件名称
#如果创建的模块名称文件路径不一致。比如在当前路径下创建 modules 目录
#可以这样使用
import sys
sys.path.append("modules") #在搜寻路径中添加 module 路径(不写绝对为相对路径)
十二:Package 的封装设计使用
#建立封包
- 文件根目录
-主程序.py
-封包目录
- __init__.py
- 模块1.py
- 模块2.py
#基本语法
import 封包目录.模块名称 ,当然也可以 as 别名简化使用
#使用的时候要引入全部路径,包含封包目录名称,例如:
import modules.模块名称
modules.模块名称.point(3,4)
十三:文字文件的读取和写入
#基本语法
文件 = open(文件路径,mode=开启模式)
#开启模式 r 读取,w 写入, r+ 读写
#读取文件全部文字
文件.read()
#一次读取一行
with open("data.txt",'r') as file:
for line in file:
print(line)
#读取 json 格式
import json
json.load(文件名)
#写入字符串
文件名.write("text...")
#写入 json
import json
json.dump('text..',文件名)
#关闭文件,释放资源
文件.close()
#简单示例:
file = open("data.txt","w")
file.write("Helle File\nSencond Line") #\n 换行 ,写入中文需要注意文件编码
file.close()
#最佳实用,这样执行后就不需要再使用 close 关闭文件,因为会自动的安全的打开关闭文件
name = "text.txt"
with open(name,'w') as text:
text.write("text.....")
#上面的打开模块如果为 'wb',也就是二进制执行会报:a bytes-like object is required, not 'str'错误,处理方式一取消 'b',二:使用encode()和decode()处理字符
#读取,同样需要开打开文件
with open("data.txt",'r') as file:
data = file.read() #需要赋值在打印,否则不会有输出
print(data)
#读取 json 改写并写入
with open("text.json",'r') as file:
data = json.load(file)
data['name'] = 'Vovo' #改写
with open("text.json",'w') as file:
json.dump(data, file) #写入
十四: 随机数与统计模块的使用
#内置模块 random statistics
import random
num = [5,7,8.5]
print(random.choice(num)) #从列表中随机选取一个
print(random.sample(num, 3)) #从列表中随机选取两个 例输出:[5, 3, 7]
data = num
random.shuffle(data)
print(data) #随机调换顺序,会修改本身
#随机,几率相同
m = random.random() # 0 ~ 1 之间的随机数,出现每次的几率是相同
print(m) #输出 0.01654210143973478
n = random.uniform(0.0, 1.0) #任意两个数字之间的随机数
print(n) #输出 0.9783437423931531
# 正态分布
m = random.normalvariate(100, 10) #平均数 100 标准差 10 的(大部分会在 90 和 100 之间)
print(m) 输出 100.73849127963179
#计算平均数
import statistics
m = statistics.mean([4,6,8])
print(m)
statistics.stdev([4,6,8]) #计算标准差
statistics.median([4,6,8,100]) #计算中位数 忽略掉 100 这种极端的存在
十五:网络连接程序、资料下载
#下载指定的网址源代码
# -*- coding: utf-8 -*-
import urllib.request as request
with request.urlopen('http://www.baidu.com') as response:
data = response.read().decode("utf-8") #加上 utf-8,处理中文字符
print(data)
# api 数据
import urllib.request as request
import json
url = "https://www.tianqiapi.com/api?version=v6&appid=74361194&appsecret=qSIalK3E"
with request.urlopen(url) as response:
data = json.load(response)
print(data)
#同过 api 保存臺北市嬰幼兒照顧服務-親子館的名称和电话
# 获取 api 的url https://data.taipei/#/dataset/detail?id=fd4779d0-827d-4ab3-8f65-2a356abad6d9
import urllib.request as request
import json
url = "https://data.taipei/opendata/datalist/apiAccess?scope=resourceAquire&rid=5c09f39f-79cc-45b8-be8e-9b3ea8b220e3"
with request.urlopen(url) as response:
data = json.load(response)
list = data['result']['results']
with open('twaiqinzi.txt','w') as file:
for name in list:
file.write(name['ORG_NAME'] +' tel:'+ name['PHONE']+"\n")
十六:类的定义和使用
#定义类
class Text:
x = 3
def say():
peint('Hello Python')
#范例,在类中使用自己
class IO:
supportedSrcs = ['console','file']
def read(src):
if src in IO.supportedSrcs:
print('read from',src)
else:
print('Not Supported')
print(IO.supportedSrcs);
IO.read('file')
IO.read('nofile')
十七:类的构造函数建立与使用
#构造函数,self 必须存在,并且不受传入参数的影响,其他和 php 类似
class Point:
def __init__(self,x,y):
self.x = x
self.y = y
def show(self):
print(self.x,self.y)
def pr(self):
return 20200214;
p = Point(1,5)
print(p.x)
p2 = Point(2,4)
print(p2.x)
p2.show()
pr = p2.pr();
print(pr)
#简易读取文件类
class File:
def __init__(self, name):
self.name = name
self.file = None
def open(self):
self.file = open(self.name, 'r')
def read(self):
return self.file.read()
f1 = File("twaiqinzi.txt")
f1.open()
data = f1.read()
print(data)
十八:网络爬虫 Web Crawler 基本教程
#只是一个范例
import urllib.request as request
import bs4
url = "https://movie.douban.com/"
#添加请求 hraders
req = request.Request(url,headers={
"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36"
})
with request.urlopen(req) as reponse:
data = reponse.read().decode('utf-8')
#利用三方类库处理
root = bs4.BeautifulSoup(data,'html.parser')
# print(root.title.string)
#单个
print(root.find("div",class_="nav-items").a.string)
#全部
name = root.find_all("div",class_="nav-items")
for n in name:
print(n.a.string)
十九: Flask 网站开发
#代码示例,我在本地 win 环境,没有测试。每变更一次代码,就需要重新执行文件
from flask import Flask
app = Flask(__name__)
@app.route("/")
def home():
return 'Hello Flask'
@app.route('/test')
def test():
return "This is a test"
if __name__ == '_main__':
app.run()
第二十:Flask 网站开发 - Heroku 云端主机教程
本章不做记录介绍
第二十一: Pandas 资料分析教程
#Anaconda3 默认安装了 pandas 主要就是操作为表格概念
#以下是一些范例
import pandas as pd
data = pd.Series([20,19,50]) #适用于列表
print(data)
#输出以下:
0 20
1 19
2 50
dtype: int64
print(data.dtype) #类型:int64
print(data.size) #数量:3
print(data.index) #索引:RangeIndex(start=0, stop=3, step=1)
print(data[1]) #取值,和数组一样
print(data[0])
print(data.max()) #找到最大值
print(data.median()) #找到中位置
print(data.prod()) #乘法总和
print(data.mean()) #平均数
print(data.median()) #中位数
print(data.std()) #标准差
print(data.nlargest(3)) #取前三大的数字
print(data.nsmallest(2)) #取最小的两个数字
#如果列表是字符串,都定义在 str 下边
print(data.str.lower()) #小写
print(data.str.upper()) #大写
print(data.str.len()) #每个字串的长度
print(data.str.cat(sep=",")) # 逗号分隔串在一起
print(data.str.contains("p")) #判断每个字符串是否包含大写的 P
print(data.str.replace('你好','Hello')) #替换字符串
data = data * 2 #所有的值都 * 2
print(data)
data = data == 20 #判断每个值是否==20,详细看下面打印
print(data)
#输出以下:
0 True
1 False
2 False
dtype: bool
#DataFrame 操作字典
dic = {"name":"apple"}
data = pd.DataFrame({
"name":['Amy','John','Bob'],
"age":[66,43,23]
})
#也可以新建索引
pd.DataFrame(data,inde=["a","b","c"])
print(data)
#输出以下
name age
0 Amy 66
1 John 43
2 Bob 23
print(data['name'])
#输出以下
0 Amy
1 John
2 Bob
print(data.iloc[0]) #根据顺序取得列
print(data.loc[0]) #根据索引获取列
#输出以下
name Amy
age 66
Name: 0, dtype: object
#建立新栏位
data['新栏位名称'] = 列表资料
data['新栏位名称'] = Series 形资料
print(data.size) #数量
print(data.shape) #形状
print(data.index) #索引
#操作字符串等都和上面 str 子方法使用相同
#可以根据原有的栏位运算来新增栏位,比如运算并新增栏位 工资水平
data['cp'] = data['revenue'] / data['salary']
看完了。