IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> day16-17-18.对象序列化和反序列化、API获取数据、python操作Excel/CSV文件、类、面向对象编程(初级及进阶) -> 正文阅读

[Python知识库]day16-17-18.对象序列化和反序列化、API获取数据、python操作Excel/CSV文件、类、面向对象编程(初级及进阶)

def- define function

url

pip的安装

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cVFCoTex-1634041017240)(C:\Users\32873\AppData\Roaming\Typora\typora-user-images\image-20211011113735456.png)]

pip —> 包管理工具

修改python的命令行窗口使用程序:file → setting → Tools → Terminal → shell path:…cmd.exe → 勾选Active virtualenv → apply → ok

pip相关命令:

pip list 查看当前依赖的三方库

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gQXaAW6D-1634041017242)(C:\Users\32873\AppData\Roaming\Typora\typora-user-images\image-20211011114146510.png)]

快捷键

ctrl + d 复制一行代码

ctrl + y 删除一行代码

代码格式规范化:ctrl + alt + L

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VmRfgRUh-1634041017244)(C:\Users\32873\AppData\Roaming\Typora\typora-user-images\image-20211011144220555.png)]

控制台查找:控制台内 ctrl + f

优化导入顺序:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o9ynDjAA-1634041017246)(C:\Users\32873\AppData\Roaming\Typora\typora-user-images\image-20211012103202654.png)]

奇奇怪怪的bug

1包围符| ,可能遇到的的bug输入方式:中文输入拼音gun —> 丨

数据库导入顺序

库导入写法顺序:(从上往下)

? 标准库

? 三方库

? 自己的库

? 对象序列化和反序列化

# 热身练习:将100以内的素数输出到一个文件中

# 素数判断函数
def is_prime(num: int) -> bool:  
    '''
    判断一个正整数是不是质数
    :param num: 正整数
    :return: 质数返回True,否则返回False
    '''
    for i in range(2, int(num ** 0.5) + 1):  # 需取到num**0.5
        if num % i == 0:
            return False
    return True


with open('prime.txt', 'w', encoding='utf-8') as file:
    for n in range(2, 100):
        if is_prime(n):
            # 方法一:
            print(n, file=file)  # 将结果打印到文件,而不是打印到控制台
            # 方法二:
            file.write(str(n))
            file.write('\n')  # 换行符
            # 方法三:
            file.write(f'{n}\n')  # 格式化字符串

1. 将字典和列表写入文件

对象的序列化(serialization)和反序列化(deserialization)

  • 序列化:把一个对象(字典、列表等)变成字符串(str)或者字节串(bytes)

  • 反序列化:从字节串或字符串中还原出一个对象(字典、列表等)

Python的标准库有**json(字符串) / pickle(字节串)**模块,可以支持我们做序列化和反序列化操作

JSON —> JavaScript Object Notation —> JavaScript语言创建对象的字面量语法 (字面量:常数量)

例如:

let person = {
    name: "骆骆",
    age: 41,
    sex: True
}

这种数据格式也非常适合在两个系统(尤其是异构的系统)传输数据(因为它是纯文本),所以今天当我们说到JSON,更多的时候是把它当成一种数据交换格式。

Python中的字典跟JSON格式非常的像,所以我们可以通过将字典转成JSON格式的字符串,就可以写入文件中实现持久化。

文件保存数据的方式:

  • 二进制文件,字节串

  • 文本文件,字符串

json序列化,其他编程语言能读出来

pickle序列化,是python的私有化语言,其他编程语言不能读出来

2 序列化和反序列化

2.1 json模块

Python3 中可以使用 json 模块来对 JSON(文本文件) 数据进行编解码,它包含了两个函数:

1)编码(序列化 - 把一个对象(字典、列表等)变成字符串(str)或者字节串(bytes))

  • json.dumps(): 对数据进行编码()。
  • json.dump(操作对象, fp = 文件对象): 对数据进行编码。

2)解码(反序列化 - 从字节串或字符串中还原出一个对象(字典、列表等))

  • json.loads(): 对数据进行解码。

2.1.1 序列化(读出)

将字典和列表写入到文件中

import json

person = {
    'name': '骆骆',
    'age': 41,
    'sex': True,
    'friends': ['赵云', '马超', '辛弃疾'],
    'car': {
        'brand': 'QQ',
        'max_speed': 120
    }
}
with open('person.txt', 'w') as file:
    # 序列化
    # 方法一:(分解写法)
    # content = json.dumps(person)
    # file.write(content)
    # 方法一:(合并写法)
    # print(json.dumps(person), file=file)
    
    # 方法二:
    json.dump(person, fp=file)

2.1.2 反序列化

读取文件中的JSON格式数据还原成字典对象

反序列化:将字符串还原成(字典)对象

import json

with open('person.txt') as file:
    # 反序列化:将字符串还原成(字典)对象
    # content = file.read()
    # obj = json.loads(content)
    # 从文件中读取JSON字符串还原成字典对象
    obj = json.load(fp=file)
    print(obj)
    print(type(obj))

2.2 pickle模块

Python3 中可以使用 pickle 模块来对 二进制文件 数据进行编解码,它包含了两个函数:

  • pickle.dumps(): 对数据进行编码。
  • pickle.dump(操作对象, file=文件对象):对数据进行编码。
  • pickle.loads(): 对数据进行解码。

2.3.1 序列化

将字典和列表写入到文件中

import pickle

person = {
    'name': '骆骆',
    'age': 41,
    'sex': True,
    'friends': ['赵云', '马超', '辛弃疾'],
    'car': {
        'brand': 'QQ',
        'max_speed': 120
    }
}
with open('person.dat', 'wb') as file:
    # 序列化
    # print(json.dumps(person), file=file)
    # content = json.dumps(person)
    # file.write(content)
    pickle.dump(person, file=file)

2.3.2 反序列化

读取文件中的Pickle格式数据还原成字典对象

反序列化:将字节串(二进制数据)还原成(字典)对象

import pickle

with open('person.dat', 'rb') as file:
    # 反序列化:将字节串(二进制数据)还原成(字典)对象
    obj = pickle.load(file)
    print(obj)
    print(type(obj))
    
    # 结果:
    # {'name': '张三', 'age': 18, 'gender': True, 'friends': ['小花', '小明'], 'car': {'brand': 'QQ', 'max_speed': 120}}
    # class 'dict'>

? 联网获取数据(通过API接口获取数据)

URL —> 网址 —> 统一资源定位符 —> 能够唯一标识一个(网络)资源的符号
https://www.baidu.com:443/index.html
https://14.215.177.38:443/index.html
https://www.baidu.com:443/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png

协议://用户名:口令@域名或者IP地址:端口/路径1/路径2/资源名称

URI —> 统一资源标识符 —> URL + URN

使用三方库 requests 可以非常方便的实现通过URL访问网络资源的操作
可以使用Python的包管理工具 pip 来安装和管理三方库以及三方工具

修改 pip 下载源为国内的镜像网站(推荐使用豆瓣网的镜像)
pip config set global.index-url https://pypi.doubanio.com/simple

检查有没有pip包:terminal(py文件下方位置) - 输入:pip --version

查找三方库:pip search requests
安装三方库:pip install requests
卸载三方库:pip uninstall requests
更新三方库:pip install -U requests

协议 —> 规范和标准 —> 网络协议 —> 通过网络进行通信的双方要遵守的规范和标准
HTTP —> 超文本传输协议 —> 请求响应式协议

HTTP -> 超文本传输协议
HTTP(S) -> 超文本传输协议(安全版本)

3.1 导入第三方库 requests

首先,安装第三方库requests,使用前需先导入.

import requests

3.1 requests 模块

requests.get(url=数据地址, params = 请求数据参数) - 通过指定的URL向Web服务器发起一个请求,该函数会返回一个相应对象

网页上获取数据:例如:从聚合数据平台获取天气数据:聚合数据 —> 天气预报(查看) —> 申请数据(得到key) —> 测试 —> 填入请求参数 -> 发送请求

3.2 通过python联网获取数据

通过python联网获取数据:例如:从聚合数据平台获取天气数据:聚合数据 —> 天气预报 —> 申请数据,获取key—> 查看天气预报中的API文档,获取接口地址(http://apis.juhe.cn/simpleWeather/query),获取请求参数

# 从聚合数据平台获取天气数据
# 聚合数据 ---> 天气预报 ---> 申请数据,获取`key`---> 查看天气预报中的`API文档`,获取`接口地址`(http://apis.juhe.cn/simpleWeather/query),获取`请求参数`

import json

import requests

# get函数会通过你指定的URL向Web服务器发起一个请求,该函数会返回一个响应对象
resp = requests.get(
    url='http://apis.juhe.cn/simpleWeather/query',
    params={
        'city': '上海',
        'key': 'e73ebce8dc3cb2f35510f4462f08430c'
    }
)
# 获取服务器响应的内容并将其反序列化成一个字典对象
weather_dict = json.loads(resp.text)
print(weather_dict['result']['realtime'])
# futures = weather_dict['result']['future']
# for future in futures:
#     print(future)
# 聚合数据 - 手机归属地

import json

import requests

url = 'http://apis.juhe.cn/mobile/get'

key = 'a85eb75a4850c5502be6ff253e70b5f2'
phone = '15882460234'
resp_phone_belong = requests.get(
    url = url,
    params={
        'key':key,
        'phone':phone
    }
)

print(resp_phone_belong.text)
phone_belong_dict = json.loads(resp_phone_belong.text)
print(phone_belong_dict)
# 天行数据 - 头条新闻获取
# 每页获取10条新闻
for page in range(1,6):
    resp_news = requests.get(
        url = 'http://api.tianapi.com/topnews/index',
        params={
            'key':'e8c5524dd2a365f20908ced735f8e480',
            'page':1,
            'num':10
        }
    )
    result = resp_news.json()  # 将resp_news转换为字典
    for news_dict in result['newslist']:
        print(news_dict['title'])  # 新闻标题
        print(news_dict['url'])  # 新闻链接
        print(news_dict['source'])  # 新闻来源
        print('-'*30)

3.3 通过响应对象获取服务器返回的内容

  • 文本文件对象.text - 通过响应对象获取服务器返回的文本内容

  • 二进制文件对象.content - 通过响应对象获取服务器返回的二进制数据

# 通过响应对象获取服务器返回的内容

import requests

resp = requests.get('https://www.sohu.com/')
# 通过响应对象获取服务器返回的文本内容
print(resp.text)

resp = requests.get('http://29e5534ea20a8.cdn.sohucs.com/c_cut,x_47,y_0,w_588,h_392,c_zoom,h_103/os/news/d5d461792f7944f11e9ed9a2bd2ff7a5.jpg')
with open('test.jpg', 'wb') as file:
    # 通过响应对象获取服务器返回的二进制数据
    file.write(resp.content)

给文件标题添加时间

from datetime import datetime

import openpyxl
import requests

workbook = openpyxl.Workbook()
sheet = workbook.active
sheet.append(('标题', '链接', '来源'))
for page in range(1, 6):
    resp = requests.get(
        url='http://api.tianapi.com/topnews/index',
        params={
            'key': 'e8c5524dd2a365f20908ced735f8e480',
            'page': page,
            'num': 20
        }
    )
    result = resp.json()
    for news_dict in result['newslist']:
        title, url, source = news_dict['title'], news_dict['url'], news_dict['source']
        sheet.append((title, url, source))
curr = datetime.now()
workbook.save(f'头条新闻数据_{curr.year}{curr.month:0>2d}{curr.day:0>2d}.xlsx')

? 用python操作Excel文件

4.1 导入第三方库 openpyxl

工作簿:一个Excel文件叫一个工作簿

工作表(sheet) :

单元格(cell):Excel文件表中的行列交汇点叫单元格

python操作Excel文件需借助第三方库openpyxl

首先,安装第三方库openpyxl,使用前需先导入

import openpyxl

4.2 创建工作簿

创建一个Excel工作簿

workbook = openpyxl.Workbook()

创建工作表

workbook.create_sheet('hello')

获取默认的工作表

sheet = workbook.active

4.3 将数据写入Excel文件

  • 工作表.append(数据)

  • 工作表.cell(行索引,列索引,数据)

    • 注意:列表中的行索引和列索引都是从1开始的
sheet.append(('姓名', '语文', '数学', '英语'))
sheet.append(('张三', 50, 60, 70))
sheet.append(('李四', 53, 66, 72))
sheet.append(('王五', 51, 67, 74))

sheet.cell(5, 1, '小明')  # 在5行4列单元格写入'小明'

4.4 保存工作簿

  • 工作对象.save(文件路径)
workbook.save('学生成绩表.xlsx')

练习:

# 练习:从天行数据获取头条新闻,并将数据保存至excel
news = openpyxl.Workbook()
# news.create_sheet('news')
sheet = news.active
# sheet.append(('title'))

for page in range(1, 6):
    resp_news = requests.get(
        url='http://api.tianapi.com/topnews/index',
        params={
            'key': 'e8c5524dd2a365f20908ced735f8e480',
            'page': 1,
            'num': 10
        }
    )
    result = resp_news.json()  # 将resp_news转换为字典
    for news_dict in result['newslist']:
        title,url,source = news_dict['title'], news_dict['url'], news_dict['source']
        sheet.append((title, url, source))
        # sheet.append((news_dict['url']))
        # sheet.append((news_dict['source']))

        # print(news_dict['title'])  # 新闻标题
        # print(news_dict['url'])  # 新闻链接
        # print(news_dict['source'])  # 新闻来源
        # print('-'*30)
curr = datetime.now()
news.save(f'新闻_{curr.year}{curr.month:0>2d}{curr.day:0>2d}.xlsx')  # 文件名中加日期

4.5 读取Excel文件

如何用Excel打开乱码文件:现将文件另存为UTF-8 with BOM utf8bom文件,再用Excel打开

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SnJPTGA2-1634041017248)(C:\Users\32873\AppData\Roaming\Typora\typora-user-images\image-20211012091006237.png)]

4.5.1 加载Excel文件

openpyxl.load_workbook(‘文件路径’)

#读取excel文件

import openpyxl

# 加载Excel文件 ---> Workbook
workbook = openpyxl.load_workbook('resources/口罩销售数据.xlsx')
# 获取所有工作表的名字
print(workbook.sheetnames)
# 获得第一个工作表 ---> Worksheet
sheet = workbook.worksheets[0]
# 获取单元格的数据
print(sheet.cell(3, 4).value)
print(sheet['D3'].value)
# 单元格的范围
print(sheet.dimensions)
# 获取表格的行数和列数
print(sheet.max_row, sheet.max_column)
# 循环遍历所有的数据
# for row in range(1, sheet.max_row + 1):
#     for col in range(1, sheet.max_column):
#         print(sheet.cell(row, col).value, end='\t')
#     print()
for row in range(2, sheet.max_row + 1):
    for col in 'ABCDEF':
        print(sheet[f'{col}{row}'].value, end='\t')
    print()

例如:

在当前?文件夹下有?一个名为“阿?里里巴巴2020年年股票数据.xlsx”的Excel?文件,如果想读取并显示该?文件的内容,
可以通过如下所示的代码来完成。

import datetime

import openpyxl

# 加载?一个?工作簿 ---> Workbook
wb = openpyxl.load_workbook('阿?里里巴巴2020年年股票数据.xlsx')
# 获取?工作表的名字
print(wb.sheetnames)
# 获取?工作表 ---> Worksheet
sheet = wb.worksheets[0]
# 获得单元格的范围
print(sheet.dimensions)
# 获得?行行数和列列数
print(sheet.max_row, sheet.max_column)

# 获取指定单元格的值
print(sheet.cell(3, 3).value) 	 #通过cell方法
print(sheet['C3'].value)	  # 通过单元格
print(sheet['G255'].value) 		 # 通过单元格

# 获取多个单元格(嵌套元组)	-	返回嵌套的元组
print(sheet['A2:C5']) 	 # 通过切片
# print(sheet['A2':'C5'])

# 读取所有单元格的数据
for row_ch in range(2, sheet.max_row + 1):
    for col_ch in 'ABCDEFG':
        value = sheet[f'{col_ch}{row_ch}'].value
        if type(value) == datetime.datetime:
            print(value.strftime('%Y年年%m?月%d?日'), end='\t')    # \t表示空四个字符,或表示一个缩进
        elif type(value) == int:
            print(f'{value:<10d}', end='\t')
            # X < Nd   -   将数据转换为长度为N的字符串,不够在后面用X(默认为空格)对应的字符来填充
        elif type(value) == float:
            print(f'{value:.4f}', end='\t')  
            # .Nf	  -   保留N位小数
        else:
            print(value, end='\t')
    print()

? 用python操作CSV文件

CSV(Comma Separated Values)全称逗号分隔值?文件是?一种简单、通?用的?文件格式,被?广泛的应?用于应?用程序
(数据库、电?子表格等)数据的导?入和导出以及异构系统之间的数据交换。因为CSV是纯?文本?文件,不不管是什什么操
作系统和编程语?言都是可以处理理纯?文本的,?而且很多编程语?言中都提供了了对读写CSV?文件的?支持,因此CSV格式在
数据处理理和数据科学中被?广泛应?用。

使用方法参见 ‘第23课:?用Python读写CSV?文件.pdf’

1. 读取CSV文件

常用的字符编码为’utf - 8’

若文件存为了UTF-8 with BOM utf8bom文件,则相应的字符编码为’utf-8-sig’

1utf - 8 - sig 带签名的UFT-8 —> 有字节序标记

with open('./resources/2018年北京积分落户数据.csv', 'r', encoding='utf-8-sig') as file:
    # utf - 8 - sig  带签名的UFT-8 ---> 有字节序标记
    content = file.readline()
    # file.readlines()  # 可一次性读完文件所有内容,但不推荐该做法(因为文件很大时,内存消耗太大)
    while content:
        print(content, end='')
        content = file.readline()
        

# 注意:如果读取UTF-8 with BOM utf8bom文件时指定encoding='utf-8',读出结果结果中可能会多出一点内容,例如:
with open('./resurces/2018年北京积分落户数据.csv', 'r', encoding='utf-8') as file:
# 结果:
# ['\ufeffid', 'name', 'birthday', 'company', 'score']
# 其中的feff是字节序标记,因为该文件为UTF-8 with BOM utf8bom文件,即为带签名的UFT-8的文件,encoding='utf-8-sig'
with open('./resources/2018年北京积分落户数据.csv', 'r', encoding='utf-8-sig') as file:
    reader = csv.reader(file, delimiter='#')  #
    # csv.reader()的参数还有:
    # delimiter(默认是逗号)
    # 该文件为逗号分隔的文件,若为其他符号作为分隔符的文件,则需要用参数delimeter(默认是逗号)进行指定(需与原文件的分隔符相同),否则会将整个一行作为同一个字符串读出(即一行只有一个元素)
    # quotechar='|'     -   去掉包围符|

    # 如果值带有包围符(双引号,或|),但不想读出|,就需要用参数quotechar='|'来去除包围
    for line in reader:
        print(line)

2. 将数据写入CSV文件

# newline=''    -   这样追加后就不会出现空行
with open('./resources/2018年北京积分落户数据.csv', 'a', encoding='utf-8-sig', newline='') as file:
    writer = csv.writer(file)  #
    # writer.writerow(['6020', '一一', '1981-06', '北京宝洁技术有限公司', '90.74'])
    # writer.writerows(嵌套列表)     -   一次写多行
    # ['6020', '一一', '1981-06', '北京宝洁技术有限公司', '90.74']
    writer.writerows([
        ['6021', '一一', '1981-06', '北京宝洁技术有限公司', '90.74'],
        ['6022', '一一', '1981-06', '北京宝洁技术有限公司', '90.74'],
        ['6023', '一一', '1981-06', '北京宝洁技术有限公司', '90.74']
    ])

3. 将CSV文件转换为Excel、修改Excel文件样式

方法一:直接另存为Excel文件

方法二:通过python将CSV文件转换为Excel格式

# 将CSV文件转换为Excel格式

import csv

import openpyxl
from openpyxl.styles import Font, Alignment


workbook = openpyxl.Workbook()
sheet = workbook.create_sheet('2018年北京积分落户数据')
# sheet = workbook.active
# sheet.title('2018年北京积分落户数据')

with open('resources/2018年北京积分落户数据.csv', 'r', encoding='utf-8-sig') as file:
    reader = csv.reader(file, delimiter='#', quotechar='|')
    for line in reader:
        sheet.append(line)
        
# 修改单元格样式

# 修改指定行的高度
sheet.row_dimensions[1].height = 40
# 修改指定列的宽度
cols_width = {
    'A': 30,
    'B': 50,
    'C': 60,
    'D': 180,
    'E': 50
}
for key in cols_width:
    sheet.column_dimensions[key].width = cols_width[key]
# 修改单元格的样式
for col in range(1, 6):
    sheet.cell(1, col).font = Font(name='STKaitiSC-Regular', size=22, bold=True, color='0000ff')
    sheet.cell(1, col).alignment = Alignment(horizontal='center', vertical='center')
workbook.save('resources/2018年北京积分落户数据.xlsx')

? 类、面向对象编程(OOP)

用对象的概念将数据和操作数据的函数从逻辑上组织成一个整体。
在面向对象的世界里,我们要解决任何问题都是先创建对象,然后给对象发出消息。

对象 - 接收消息的实体 —> 具体概念
类 - 对象的蓝图和模板 —> 抽象概念

  1. 一切皆为对象
  2. 每个对象都是独一无二的
  3. 对象都有静态特征(属性)和动态特征(行为)
  4. 对象都属于某个类

面向对象编程的实施步骤:

  1. 定义类
    数据抽象:给出对象的静态特征 —> 属性
    行为抽象:给出对象的动态特征 —> 行为
  2. 创建对象

  3. 给对象发消息

定义类的语法:

? class 类名:

说明:

  • class - 关键字
  • 类名 - 每个单词首字母大写

变量、函数的命名:snake_case

类命名:CamelNotation(驼峰命名法)

练习:创建一个矩形类

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zsXYuJzh-1634041017250)(file:///C:\Users\32873\Documents\Tencent Files\1090340335\Image\Group2\0S\N0\0SN0}0F[U7LU6W3DU@PR@`2.jpg)]

# 矩形类

# 第1步:定义类
class Rectangle:
    """矩形"""
    
    # 数据抽象
    def __init__(self, width, height):
    # self - 第一个参数都是self;self代表对象自己
    # __init__方法:在使用构造器语法创建对象时,方法__init__会被自动调用
        """
        初始化方法
        :param width: 矩形的宽度
        :param height: 矩形的高度
        """
        self.width = width
        self.height = height
    # def __init__(self, w, h):
    #     self.width = w
    #     self.height = h

    # 行为抽象
    def perimeter(self):
        """计算周长"""
        return (self.width + self.height) * 2

    def area(self):
        """计算面积"""
        return self.width * self.height

# 第2步:创建对象 ---> 构造器语法
# 构造器语法:对象名 = 类名()
rect = Rectangle(width=5, height=3)
# rect = Rectangle(5,3)

# 第3步:给对象发消息
print(f'矩形的周长:{rect.perimeter()}')
print(f'矩形的面积:{rect.area()}')

练习:创建一个学生类

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w3RegQdd-1634041017251)(C:\Users\32873\AppData\Roaming\Typora\typora-user-images\image-20211012144554507.png)]

# 学生类
class Student():
    """学生"""

    def __init__(self, name, age):
        """
        初始化代码
        :param name: 姓名
        :param age: 年龄
        """
        self.name = name
        self.age = age

    def eat(self):
        """吃饭"""
        pass
        return f'{self.name} is eating.'

    def play(self):
        """玩耍"""
        return f'{self.name} is playing.'

    def study(self, course_name):
        """
        学习
        :param course_name: 课程名称
        :return:
        """
        return f'{self.name} is studing {course_name}.'


stu1 = Student('一一', 41)
stu2 = Student('二二', 32)

stu1.eat()
stu2.play()
print(stu1.study('Chinese'))

练习:使用类的方法计算泳池造价

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sYfbwPKS-1634041017252)(C:\Users\32873\AppData\Roaming\Typora\typora-user-images\image-20211012153812149.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zy9BbzQp-1634041017253)(C:\Users\32873\AppData\Roaming\Typora\typora-user-images\image-20211012154907611.png)]

# 泳池造价
class Circle:
    def __init__(self, radius):
        self.radius = radius

    def perimeter(self):
        return 2 * math.pi * self.radius

    def area(self):
        return math.pi * self.radius ** 2

r = float(input('请输入泳池半径:'))
c1, c2 = Circle(r), Circle(r + 3)
fence_price = c2.perimeter() * 38.2
aisle_price = (c2.area()-c1.area()) * 28.5
print(f'围墙的造价为{fence_price:.2f}')
print(f'过道的造价为{aisle_price:.2f}')

练习:定义类描述数字时钟

属性:时分秒

行为:走字、显示时间

清屏

# 数字时钟
class Clock:

    def __init__(self, hour=0, minute=0, second=0):
        self.hour = hour
        self.minute = minute
        self.second = second

    def show(self, mode_12=False):
        """
        显示时间
        :param mode_12:
        :return:
        """
        if mode_12:
            if self.hour < 12:
                return f'{self.hour:0>2d}:{self.minute:0>2d}:{self.second:0>2d} AM'
            else:
                self.hour = self.hour - 12 if self.hour > 12 else self.hour
                return f'{self.hour:0>2d}:{self.minute:0>2d}:{self.second:0>2d} PM'

        return f'{self.hour:0>2d}:{self.minute:0>2d}:{self.second:0>2d}'

    def run(self):
        """走字"""
        self.second += 1
        if self.second == 60:
            self.second = 0
            self.minute += 1
            if self.minute == 60:
                self.hour += 1
                self.minute = 0
                if self.hour == 24:
                    self.hour = 0


clock = Clock()
while True:
    # 通过os模块的system函数
    # 清屏:Windows - --> cls
    #      macOS - --> clear
    # 即打印语句前写入代码:
    import os
    os.system('cls')  # windows系统
    os.system('clear')  # 苹果系统
    # 但写入后直接运行并不会清屏,需要在终端运行才会实现清屏效果
    # 调用终端运行程序:Terminal ---> 调用python解释器执行该py文件(即在终端输入:python example08.py) ---> 即可实现清屏效果
    print(clock.show())
    time.sleep(1)
    clock.run()

练习:定义类描述倒计时器

# 倒计时器

class CountdownTimer():

    def __init__(self, hour=24, minute=0, second=0):
        self.hour = hour
        self.minute = minute
        self.second = second

    def show(self):
        """显示时间"""
        return f'{self.hour:0>2d}:{self.minute:0>2d}:{self.second:0>2d}'

    def run(self):
        """走字"""
        self.second -= 1
        if self.second < 0:
            self.minute -= 1
            self.second = 59
            if self.minute < 0:
                self.hour -= 1
                self.minute = 59
                # if self.hour == 0:
                #     pass


clock = CountdownTimer(0, 0, 1)
while True:
    print(clock.show())
    if clock.show() == '00:00:00':
        print('end!')
        exit()
    clock.run()
    time.sleep(1)

? 函数式编程

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-10-12 23:23:18  更:2021-10-12 23:25:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 19:59:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码