kavo

记一次学习 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']

看完了。

posted on 2020-02-13 20:10  下雨天唱情歌  阅读(1)  评论(0编辑  收藏  举报  来源

导航