Python教程--基本技能

】@TOC

5.1 解析命令行参数

在Python中,解析命令行参数是一项常见的任务,尤其是在开发命令行工具或脚本时。Python标准库提供了argparse模块,它可以帮助你轻松地编写用户友好的命令行接口。下面是使用argparse模块解析命令行参数的基本步骤:

引入argparse模块

首先,你需要引入argparse模块。

import argparse

创建ArgumentParser对象

接下来,创建一个ArgumentParser对象。这个对象将帮助你定义和解析命令行参数。

parser = argparse.ArgumentParser(description='这是一个示例脚本。')

定义参数

使用add_argument()方法来定义命令行参数。你可以指定参数名、参数类型、帮助信息等。

parser.add_argument('input', type=str, help='输入文件的路径。')
parser.add_argument('--output', '-o', type=str, default='output.txt', help='输出文件的路径。')
parser.add_argument('--verbose', '-v', action='store_true', help='启用详细输出。')

解析参数

定义好所有参数后,调用parse_args()方法来解析命令行参数。

args = parser.parse_args()

使用参数

解析后的参数将被存储在args对象中,你可以像使用普通变量一样使用它们。

if args.verbose:
    print(f'输入文件:{args.input}')
    print(f'输出文件:{args.output}')
# 你的代码逻辑

完整示例

下面是一个完整的示例,展示了如何定义、解析和使用命令行参数:

import argparse
def main():
    parser = argparse.ArgumentParser(description='这是一个示例脚本。')
    parser.add_argument('input', type=str, help='输入文件的路径。')
    parser.add_argument('--output', '-o', type=str, default='output.txt', help='输出文件的路径。')
    parser.add_argument('--verbose', '-v', action='store_true', help='启用详细输出。')
    
    args = parser.parse_args()
    
    if args.verbose:
        print(f'输入文件:{args.input}')
        print(f'输出文件:{args.output}')
    
    # 你的代码逻辑
if __name__ == '__main__':
    main()

你可以通过命令行运行这个脚本,并传递相应的参数。例如:

python script.py input.txt --output result.txt -v

在这个例子中,script.py是脚本的名字,input.txt是必需的输入文件参数,--output result.txt-v是可选的输出文件和详细输出参数。


5.2 时间日期处理
在Python中,处理时间日期是编程中的常见需求。Python标准库提供了datetime模块,它提供了多种时间日期相关的类和函数,用于处理日期、时间、时间差等。下面是使用datetime模块进行时间日期处理的基本步骤:

引入datetime模块

首先,你需要引入datetime模块。

from datetime import datetime, timedelta

获取当前时间

你可以使用datetime.now()方法来获取当前时间。

current_time = datetime.now()
print(current_time)

日期和时间格式化

你可以使用strftime()方法来格式化日期和时间,使其更容易阅读。

formatted_time = current_time.strftime('%Y-%m-%d %H:%M:%S')
print(formatted_time)

日期和时间加减

你可以使用timedelta对象来增加或减少日期和时间。

# 增加3天
three_days_later = current_time + timedelta(days=3)
print(three_days_later)
# 减少1小时
one_hour_ago = current_time - timedelta(hours=1)
print(one_hour_ago)

日期和时间比较

你可以使用timedelta对象来比较日期和时间。

# 比较两个时间
time_diff = three_days_later - current_time
print(time_diff)

示例

下面是一个完整的示例,展示了如何使用datetime模块进行时间日期处理:

from datetime import datetime, timedelta
def main():
    current_time = datetime.now()
    print(f'当前时间:{current_time}')
    formatted_time = current_time.strftime('%Y-%m-%d %H:%M:%S')
    print(f'格式化时间:{formatted_time}')
    three_days_later = current_time + timedelta(days=3)
    print(f'三天后的时间:{three_days_later}')
    one_hour_ago = current_time - timedelta(hours=1)
    print(f'一个小时前的時間:{one_hour_ago}')
    # 比较两个时间
    time_diff = three_days_later - current_time
    print(f'时间差:{time_diff}')
if __name__ == '__main__':
    main()

你可以通过命令行运行这个脚本,并查看输出结果。这个示例展示了如何获取当前时间、格式化日期和时间、进行日期和时间的加减以及比较日期和时间。


5.3 数据文件读写

在Python中,处理数据文件读写是一项基础技能,用于读取或写入文本文件、CSV文件、JSON文件等。Python标准库提供了osos.pathopencsvjson等模块,用于操作文件和读写不同类型的数据。下面是使用这些模块进行数据文件读写的步骤:

引入相关模块

首先,你可能需要引入一些相关模块。

import os
import csv
import json

读取文本文件

使用open()函数来读取文本文件。

# 打开文件
with open('example.txt', 'r') as file:
    # 读取文件内容
    content = file.read()
    print(content)

写入文本文件

使用open()函数来写入文本文件。

# 打开文件
with open('example.txt', 'w') as file:
    # 写入文件内容
    file.write('这是要写入的内容')

读取CSV文件

使用csv.reader()来读取CSV文件。

# 打开文件
with open('example.csv', 'r') as file:
    # 创建CSV读取器
    reader = csv.reader(file)
    # 读取文件内容
    for row in reader:
        print(row)

写入CSV文件

使用csv.writer()来写入CSV文件。

# 打开文件
with open('example.csv', 'w') as file:
    # 创建CSV写入器
    writer = csv.writer(file)
    # 写入文件内容
    writer.writerow(['列1', '列2', '列3'])
    writer.writerow(['值1', '值2', '值3'])

读取JSON文件

使用json.load()来读取JSON文件。

# 打开文件
with open('example.json', 'r') as file:
    # 创建JSON解析器
    data = json.load(file)
    print(data)

写入JSON文件

使用json.dump()来写入JSON文件。

# 打开文件
with open('example.json', 'w') as file:
    # 创建JSON解析器
    json.dump(data, file)

示例

下面是一个完整的示例,展示了如何使用Python进行数据文件读写:

import os
import csv
import json
def main():
    # 读取文本文件
    with open('example.txt', 'r') as file:
        content = file.read()
        print(content)
    # 写入文本文件
    with open('example.txt', 'w') as file:
        file.write('这是要写入的内容')
    # 读取CSV文件
    with open('example.csv', 'r') as file:
        reader = csv.reader(file)
        for row in reader:
            print(row)
    # 写入CSV文件
    with open('example.csv', 'w') as file:
        writer = csv.writer(file)
        writer.writerow(['列1', '列2', '列3'])
        writer.writerow(['值1', '值2', '值3'])
    # 读取JSON文件
    with open('example.json', 'r') as file:
        data = json.load(file)
        print(data)
    # 写入JSON文件
    with open('example.json', 'w') as file:
        json.dump(data, file)
if __name__ == '__main__':
    main()

在这个例子中,我们展示了如何使用Python进行文本文件、CSV文件和JSON文件的读写。这些技能在处理数据和配置文件时非常有用。


5.4 数据库操作

在Python中,数据库操作通常涉及与关系型数据库(如MySQL、PostgreSQL)或NoSQL数据库(如MongoDB、Redis)的交互。Python的标准库和第三方库提供了多种数据库接口,如sqlite3MySQLdbpsycopg2pymongo等。以下是一些基本步骤,用于在Python中进行数据库操作:

引入相关模块

首先,你可能需要引入一些数据库接口模块。

import sqlite3
import pymysql
import pymongo

连接数据库

使用适当的连接函数来建立与数据库的连接。

# 连接SQLite数据库
conn = sqlite3.connect('example.db')
# 连接MySQL数据库
conn = pymysql.connect(host='localhost', user='root', password='password', database='test_db')
# 连接MongoDB数据库
client = pymongo.MongoClient('mongodb://localhost:27017/')
db = client['test_db']

创建数据库表或集合

在连接数据库后,你可以使用SQL语句或MongoDB的集合操作来创建新的表或集合。

# 创建SQLite表
cursor = conn.cursor()
cursor.execute('CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)')
conn.commit()
# 创建MongoDB集合
db.create_collection('users')

插入数据

你可以使用SQL语句或MongoDB的文档操作来插入数据。

# 插入SQLite数据
cursor.execute('INSERT INTO users (name, age) VALUES (?, ?)', ('Alice', 30))
conn.commit()
# 插入MongoDB数据
db.users.insert_one({'name': 'Bob', 'age': 25})

查询数据

你可以使用SQL语句或MongoDB的查询操作来检索数据。

# 查询SQLite数据
cursor.execute('SELECT * FROM users WHERE age > ?', (25,))
rows = cursor.fetchall()
for row in rows:
    print(row)
# 查询MongoDB数据
for user in db.users.find({'age': {'$gt': 25}}):
    print(user)

更新和删除数据

你可以使用SQL语句或MongoDB的更新和删除操作来修改或删除数据。

# 更新SQLite数据
cursor.execute('UPDATE users SET age = ? WHERE name = ?', (31, 'Alice'))
conn.commit()
# 删除SQLite数据
cursor.execute('DELETE FROM users WHERE name = ?', ('Bob',))
conn.commit()
# 更新MongoDB数据
db.users.update_one({'name': 'Bob'}, {'$set': {'age': 26}})
# 删除MongoDB数据
db.users.delete_one({'name': 'Charlie'})

关闭数据库连接

完成数据库操作后,应该关闭数据库连接。

cursor.close()
conn.close()

示例

下面是一个完整的示例,展示了如何使用Python进行SQLite数据库操作:

import sqlite3
def main():
    # 连接SQLite数据库
    conn = sqlite3.connect('example.db')
    cursor = conn.cursor()
    # 创建表
    cursor.execute('CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)')
    conn.commit()
    # 插入数据
    cursor.execute('INSERT INTO users (name, age) VALUES (?, ?)', ('Alice', 30))
    cursor.execute('INSERT INTO users (name, age) VALUES (?, ?)', ('Bob', 25))
    conn.commit()
    # 查询数据

    cursor.execute('SELECT * FROM users WHERE age > ?', (25,))
    rows = cursor.fetchall()
    for row in rows:
        print(row)
    # 更新数据
    cursor.execute('UPDATE users SET age = ? WHERE name = ?', (31, 'Alice'))
    conn.commit()
    # 删除数据
    cursor.execute('DELETE FROM users WHERE name = ?', ('Bob',))
    conn.commit()
    # 关闭数据库连接
    cursor.close()
    conn.close()
if __name__ == '__main__':
    main()

在这个例子中,我们展示了如何使用Python进行SQLite数据库的连接、表创建、数据插入、查询、更新和删除操作。这些技能对于与数据库交互的应用程序至关重要。


5.6 源码打包

源码打包是将Python项目打包成一个可分发和可安装的格式,以便于其他用户能够轻松地安装和使用你的项目。Python中常用的打包格式有wheelsdistwheel是一种更高效的打包格式,而sdist则是源码打包的通用格式。

使用setuptools进行源码打包

setuptools是一个Python库,它提供了一套命令行工具和Python代码,用于创建和分发Python包。你可以使用setuptools来创建wheelsdist格式的源码包。

安装setuptools

如果你还没有安装setuptools,可以使用pip进行安装。

pip install setuptools
创建setup.py文件

创建一个名为setup.py的文件,该文件将包含你的包的元数据和打包命令。

from setuptools import setup, find_packages
setup(
    name='my_package',
    version='1.0',
    description='这是一个示例包',
    author='Your Name',
    author_email='your_email@example.com',
    url='https://example.com',
    packages=find_packages(),
    # 你可以添加其他需要的信息,如安装需求等
)
打包源码

setup.py文件所在的目录中,运行以下命令来创建sdistwheel格式的源码包。

python setup.py sdist bdist_wheel

这个命令会生成一个.tar.gz文件(sdist格式)和一个.whl文件(wheel格式)。

安装打包的包

你可以使用pip来安装这些打包好的包。

pip install my_package-1.0.tar.gz

或者

pip install my_package-1.0-py3-none-any.whl

使用wheel进行源码打包

wheel是一个用于创建、分发和安装Python包的命令行工具。你可以使用wheel来创建wheel格式的源码包。

安装wheel

如果你还没有安装wheel,可以使用pip进行安装。

pip install wheel
创建setup.py文件

创建一个名为setup.py的文件,该文件将包含你的包的元数据和打包命令。

from setuptools import setup, find_packages
setup(
    name='my_package',
    version='1.0',
    description='这是一个示例包',
    author='Your Name',
    author_email='your_email@example.com',
    url='https://example.com',
    packages=find_packages(),
    # 你可以添加其他需要的信息,如安装需求等
)
打包源码

setup.py文件所在的目录中,运行以下命令来创建wheel格式的源码包。

python setup.py bdist_wheel

这个命令会生成一个.whl文件(wheel格式)。

安装打包的包

你可以使用pip来安装这个打包好的包。

pip install my_package-1.0-py3-none-any.whl

示例

下面是一个完整的示例,展示了如何使用setuptoolswheel进行源码打包:

# 创建一个名为 setup.py 的文件
from setuptools import setup, find_packages
setup(
    name='my_package',
    version='1.0',
    description='这是一个示例包',
    author='Your Name',
    author_email='your_email@example.com',
    url='https://example.com',
    packages=find_packages(),
    # 你可以添加其他需要的信息,如安装需求等
)
# 在 setup.py 文件所在的目录中,使用 setuptools 创建 sdist 和wheel 格式的源码包。
python setup.py sdist bdist_wheel

这个命令会生成一个.tar.gz文件(sdist格式)和一个.whl文件(wheel格式)。

安装打包的包

你可以使用pip来安装这些打包好的包。

pip install my_package-1.0.tar.gz

或者

pip install my_package-1.0-py3-none-any.whl

使用twine进行源码打包

twine是一个专门用于上传Python包到PyPI(Python包索引)的命令行工具。它依赖于setuptoolswheel,因此你需要在安装twine之前确保已经安装了这两个工具。

安装twine

如果你还没有安装twine,可以使用pip进行安装。

pip install twine
打包源码

setup.py文件所在的目录中,运行以下命令来创建wheel格式的源码包。

python setup.py bdist_wheel

这个命令会生成一个.whl文件(wheel格式)。

上传到PyPI

使用twine来上传打包好的包到PyPI。

twine upload dist/*

这将使用dist目录中的所有文件上传到PyPI。确保在执行此命令之前,你已经设置了PyPI的凭据,并且你的包满足PyPI的命名规范和上传要求。

示例

下面是一个完整的示例,展示了如何使用twine进行源码打包并上传到PyPI:

# 创建一个名为 setup.py 的文件
from setuptools import setup, find_packages
setup(
    name='my_package',
    version='1.0',
    description='这是一个示例包',
    author='Your Name',
    author_email='your_email@example.com',
    url='https://example.com',
    packages=find_packages(),
    # 你可以添加其他需要的信息,如安装需求等
)
# 在 setup.py 文件所在的目录中,使用 setuptools 创建 wheel 格式的源码包。
python setup.py bdist_wheel
# 使用 twine 上传到 PyPI
twine upload dist/*

请注意,上传到PyPI之前,你需要有一个有效的PyPI账户,并设置好你的账户凭据。你可以在命令行中使用twine upload命令来上传包,或者在命令行中使用twine upload --repository-url <repository-url>命令来上传包到其他包索引。


在Python中,网络编程是一项重要的技能,它允许你的程序通过网络与其他程序进行通信。Python的标准库中提供了多个模块来支持网络编程,包括sockethttp.clienturllib等。以下是一些基本的网络编程概念和示例。

5.7 网络编程

1. socket 编程基础

socket 模块提供了标准的BSD Sockets API。一个socket是网络通信的一个端点,可以看作是不同计算机进程之间的数据通道。

  • TCP客户端
import socket
# 创建一个socket对象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接到服务器
s.connect(('www.example.com', 80))
# 发送数据
s.sendall(b'GET / HTTP/1.1\r\nHost: www.example.com\r\n\r\n')
# 接收数据
data = s.recv(1024)
print(data)
# 关闭连接
s.close()
  • TCP服务器
import socket
# 创建一个socket对象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定地址和端口
s.bind(('0.0.0.0', 8080))
# 监听连接
s.listen(1)
# 接受连接
conn, addr = s.accept()
print('Connected by', addr)
# 接收数据
while True:
    data = conn.recv(1024)
    if not data:
        break
    print(data)
# 关闭连接
conn.close()
2. HTTP 客户端请求

http.client 模块提供了HTTP协议的客户端实现。

import http.client
# 创建一个连接
conn = http.client.HTTPSConnection("www.example.com")
# 发送GET请求
conn.request("GET", "/")
# 获取响应
r1 = conn.getresponse()
# 打印响应状态和响应体
print(r1.status, r1.reason)
print(r1.read().decode('utf-8'))
# 关闭连接
conn.close()
3. 使用 requests 模块

requests 是一个更高级、更友好的HTTP客户端库,它简化了发送HTTP请求的过程。

import requests
# 发送GET请求
response = requests.get('https://www.example.com')
# 检查响应状态码
if response.status_code == 200:
    print(response.text)
else:
    print('Failed to retrieve data:', response.status_code)
4. urllib 使用

urllib 是一个用于读取来自Web的数据的模块。

from urllib.request import urlopen
# 打开一个URL
with urlopen('https://www.example.com') as response:
    # 读取网页内容
    html = response.read()
print(html.decode('utf-8'))

网络编程是Python应用中非常广泛的一部分,可以用于开发各种网络应用,包括网站、网络服务、分布式系统等。在实际开发中,理解网络协议、网络模型以及如何使用Python进行网络通信是非常重要的。


在Python中,发送邮件是一个常见的任务,通常用于自动化报告、提醒通知或作为服务的一部分。Python的smtp库可以用来发送邮件。以下是一个使用smtp库发送邮件的基本示例。

5.8 发送邮件

使用SMTP发送邮件
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
# 邮件发送者
sender = 'from@example.com'
# 邮件接收者
receiver = 'to@example.com'
# 邮件主题
subject = 'Python SMTP 邮件测试'
# 邮件正文
body = '这是一封来自Python脚本的测试邮件。'
# 创建一个带附件的实例
message = MIMEMultipart()
message['From'] = Header("发件人", 'utf-8')
message['To'] = Header("收件人", 'utf-8')
message['Subject'] = Header(subject, 'utf-8')
# 邮件正文内容
message.attach(MIMEText(body, 'plain', 'utf-8'))
# 添加附件(可选)
with open('附件.txt', 'r', encoding='utf-8') as f:
    att = MIMEText(f.read(), 'base64', 'utf-8')
    att["Content-Type"] = 'application/octet-stream'
    # 这里的filename可以任意写,写什么名字,邮件中显示什么名字
    att["Content-Disposition"] = 'attachment; filename="附件.txt"'
    message.attach(att)
# SMTP服务器地址
smtp_server = 'smtp.example.com'
# 发送者邮箱用户名和密码
username = 'your_username'
password = 'your_password'
# 连接SMTP服务器
server = smtplib.SMTP(smtp_server, 25)
server.starttls()
server.login(username, password)
# 发送邮件
server.sendmail(sender, receiver, message.as_string())
# 关闭服务器连接
server.quit()

在上面的代码中,你需要将senderreceiversmtp_serverusernamepassword替换为实际的发送者邮箱、接收者邮箱、SMTP服务器地址以及发送者邮箱的用户名和密码。如果SMTP服务器使用的是SSL加密(例如Gmail的SMTP服务器),则端口通常是465,并且需要使用smtplib.SMTP_SSL来连接服务器。
请注意,出于安全考虑,不要在代码中硬编码密码。可以使用环境变量或其他安全的方式来管理敏感信息。
发送邮件是一个涉及网络通信的过程,因此需要确保网络连接畅通,并且邮箱服务器配置正确。在实际应用中,可能还需要处理各种异常情况,例如网络错误、认证失败等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/760574.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

微积分-导数3(微分法则)

常见函数的导数 常量函数的导数 d d x ( c ) 0 \frac{d}{dx}(c) 0 dxd​(c)0 常量函数的图像是一条水平线 y c y c yc&#xff0c;它的斜率为0&#xff0c;所以我们必须有 f ′ ( x ) 0 f(x) 0 f′(x)0。从导数的定义来看&#xff0c;证明也很简单&#xff1a; f ′ …

44 - 50题高级字符串函数 / 正则表达式 / 子句 - 高频 SQL 50 题基础版

目录 1. 相关知识点2.例子2.44 - 修复表中的名字2.45 - 患某种疾病的患者2.46 - 删除重复的电子邮箱2.47 - 第二高的薪水2.48 - 按日期分组销售产品2.49 - 列出指定时间段内所有的下单产品2.50 - 查找拥有有效邮箱的用户 1. 相关知识点 相关函数 函数含义concat()字符串拼接upp…

MT6989(天玑9300)芯片性能参数_MTK联发科5G处理器

MT6989是联发科Dimensity旗舰系列的成员&#xff0c;旨在为旗舰5G智能手机供应商提供最先进的技术和性能。MT6989也是联发科目前最具创新和强大的5G智能手机芯片&#xff0c;具有领先的功耗效率&#xff0c;无与伦比的计算架构&#xff0c;有史以来最快和最稳定的5G调制解调器&…

MySQL之主从同步、分库分表

1、主从同步的原理 MySQL主从复制的核心是二进制日志 二进制日志&#xff08;binlog&#xff09;记录了所有DDL语句和DML语句&#xff0c;但不包括数据查询&#xff08;select、show&#xff09;语句。 1.1、复制分三步 master主库在事务提交时&#xff0c;会把数据变更记录…

九浅一深Jemalloc5.3.0 -- ②浅*size class

目前市面上有不少分析Jemalloc老版本的博文&#xff0c;但5.3.0却少之又少。而且5.3.0的架构与之前的版本也有较大不同&#xff0c;本着“与时俱进”、“由浅入深”的宗旨&#xff0c;我将逐步分析Jemalloc5.3.0的实现。 另外&#xff0c;单讲实现代码是极其枯燥的&#xff0c;…

mmap()函数和munmap()函数的例子

代码&#xff1a; #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <sys/mman.h> #include <string.h> #include <stdio.h> #include <unistd.h>#define FILELENGTH 80 int main(void) {int fd-1;char …

Objective-C使用块枚举的细节

对元素类型的要求 在 Objective-C 中&#xff0c;NSArray 只能存储对象类型&#xff0c;而不能直接存储基本类型&#xff08;例如 int&#xff09;。但是&#xff0c;可以将基本类型封装在 NSNumber 等对象中&#xff0c;然后将这些对象存储在 NSArray 中。这样&#xff0c;en…

爬虫中如何创建Beautiful Soup 类的对象

在使用 lxml 库解析网页数据时&#xff0c;每次都需要编写和测试 XPath 的路径表达式&#xff0c;显得非常 烦琐。为了解决这个问题&#xff0c; Python 还提供了 Beautiful Soup 库提取 HTML 文档或 XML 文档的 节点。 Beautiful Soup 使用起来很便捷&#xff0c;…

Web后端开发概述环境搭建项目创建servlet生命周期

Web开发概述 web开发指的就是网页向后再让发送请求,与后端程序进行交互 web后端(javaEE)程序需要运行在服务器中 这样前端才可以对其进行进行访问 什么是服务器? 解释1: 服务器就是一款软件,可以向其发送请求,服务器会做出一个响应.可以在服务器中部署文件&#xff0c;让…

使用世界变换的逆转置矩阵对法线进行变换

法向量变换细节记录 最近在做法向量变换的时候&#xff0c;踩了两个坑&#xff0c;记录一下相关的知识点 法向量做变换&#xff0c;最后一位是补0 我们知道&#xff0c;顶点在做变换的时候最后一位是 1.0&#xff0c;法线最后一位是补0.0 vec3 normCurrent (getMatrixWorld() …

【NodeJs】入门

目录 一、前导 二、 url模块 三、path模块 四、buffer模块 五、fs模块 六、stream流模块 七、os模块 八、crypto模块 九、util模块 十、http模块 nodejs官网 Node.js — 在任何地方运行 JavaScript nmp是Node.js包管理器&#xff0c;用来安装各种库、框架和工具&…

基于STM32的八位数码管显示和闹钟计时【Proteus仿真】

某鱼&#xff1a;两栖电子 一、系统功能 采用矩阵键盘&#xff0c;按下对应的数字再按下确认按键&#xff0c;数码管会显示自己输入的数字&#xff0c;如果按错可以使用删除按钮进行删除。点击计时按钮可以显示当前的时间。 二、使用器件 DS1302实时时钟芯片&#xff0c;8位数…

Mac虚拟机软件有什么用?

随着苹果M系列芯片电脑的推出&#xff0c;虚拟机的使用变得越来越流行。不同于苹果以往的Intel处理器电脑&#xff0c;其M系列芯片电脑无法安装双系统。如果要使用非macOS系统&#xff0c;可以通过创建虚拟机系统的方式实现。那么&#xff0c;虚拟机软件有什么作用和用途&#…

DP(动态规划)【3】 最长公共子序列 最长回文子串

目录 1.最长公共子序列 状态转移方程需要二维数组&#xff0c;1-dim已经不太够了 又是这个问题&#xff1a;如何读入字符串 2.最长回文子串 1.最长公共子序列 状态转移方程需要二维数组&#xff0c;1-dim已经不太够了 这里dp[i][j]是说S的前i位与T的前j位公共序列&#xff…

韩顺平0基础学java——第34天

p675-689 UDP网络编程 1.类 DatagramSocket和 DatagramPacket[数据包/数据报]实现了基于UDP协议网络程序。 2.UDP数据报通过数据报套接字DatagramSocket发送和接收&#xff0c;系统不保证UDP数据报一定能够安全送到目的地,也不能确定什么时候可以抵达。 3.DatagramPacket对象…

FastAPI教程III

本文参考FastAPI教程https://fastapi.tiangolo.com/zh/tutorial 这部分暂无需求的没有记录&#xff0c;仅放置标题。 依赖项 安全性 中间件 你可以向FastAPI应用添加中间件。 ”中间件“是一个函数&#xff0c;它在每个请求被特定的路径操作处理之前&#xff0c;以及在每个…

植物大战僵尸融合版最新版2024蓝飘飘fly

亲爱的花园守护者们&#xff0c;是否已经厌倦了传统塔防游戏的老套模式&#xff1f;是否渴望在熟悉的《植物大战僵尸》中寻找全新的刺激体验&#xff1f;那么&#xff0c;让我们一起走进《植物大战僵尸融合版》的异想世界&#xff0c;开启一场别开生面的园艺之战吧&#xff01;…

区间动态规划——最长回文子序列长度(C++)

把夜熬成粥&#xff0c;然后喝了它。 ——2024年7月1日 书接上回&#xff1a;区间动态规划——最长回文子串&#xff08;C&#xff09;-CSDN博客&#xff0c;大家有想到解决办法吗&#xff1f; 题目描述 给定一个字符串s&#xff08;s仅由数字和英文大小写字母组成&#xff0…

以太网交换机原理

没有配置&#xff0c;比较枯燥&#xff0c;二可以认识线缆&#xff0c; 三比较重要&#xff0c;慢慢理解&#xff0c;事半功倍。 各位老少爷们&#xff0c;在下给大家说段以太网交换机原理&#xff0c;说得不好大家多多包涵&#xff0c;说得好呢&#xff0c;大家叫个好&#x…

Debugging using Visual Studio Code

One of the key features of Visual Studio Code is its great debugging support. VS Code’s built-in debugger helps accelerate your edit, compile, and debug loop. Debugger extensions VS Code 内置了对 Node.js 运行时的调试支持,可以调试 JavaScript、TypeScript…