“Python 编程的 10 个实用示例:从单链表到哈希表”

在这篇博客中,我们将探讨一些常见的 Python 编程示例,包括计算最小公倍数和最大公约数、多线程编程、TCP/IP 客户端服务器、网络爬虫、图形界面、正则表达式、单链表、双链表和哈希表的实现。

示例 1:最小公倍数

步骤

  1. 定义一个函数 lcm,计算两个数的最小公倍数。
  2. 使用嵌套函数 gcd 计算两个数的最大公约数。
  3. 使用公式 lcm(a, b) = abs(a * b) // gcd(a, b) 计算最小公倍数。

代码

def lcm(a, b):
    def gcd(x, y):
        while y:
            x, y = y, x % y
        return x

    return abs(a * b) // gcd(a, b)

print(lcm(15, 20))  # 输出60

代码解析

  1. def lcm(a, b):定义计算最小公倍数的函数。
  2. def gcd(x, y):定义计算最大公约数的嵌套函数。
  3. return abs(a * b) // gcd(a, b):使用公式计算最小公倍数。

运行结果

60

示例 2:最大公约数

步骤

  1. 定义一个函数 gcd,计算两个数的最大公约数。
  2. 使用欧几里得算法计算最大公约数。

代码

def gcd(a, b):
    while b:
        a, b = b, a % b
    return a

print(gcd(15, 20))  # 输出5

代码解析

  1. def gcd(a, b):定义计算最大公约数的函数。
  2. while b:使用欧几里得算法计算最大公约数。

运行结果

5

示例 3:多线程

步骤

  1. 导入 threading 模块。
  2. 定义一个函数 square,计算一个数的平方。
  3. 创建多个线程,计算一系列数字的平方。

代码

import threading

def square(n):
    print(f"The square of {n} is {n * n}")

numbers = [1, 2, 3, 4, 5]
threads = []

for number in numbers:
    t = threading.Thread(target=square, args=(number,))
    threads.append(t)
    t.start()

for t in threads:
    t.join()

代码解析

  1. import threading:导入 threading 模块。
  2. def square(n):定义计算平方的函数。
  3. threading.Thread(target=square, args=(number,)):创建线程并启动。

运行结果

The square of 1 is 1
The square of 2 is 4
The square of 3 is 9
The square of 4 is 16
The square of 5 is 25

示例 4:TCP/IP 客户端服务器

步骤

  1. 导入 socket 模块。
  2. 编写服务器代码,监听客户端连接并发送消息。
  3. 编写客户端代码,连接服务器并接收消息。

代码

服务器

import socket

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('localhost', 8080))
server_socket.listen(5)

print("Server is listening...")

while True:
    client_socket, addr = server_socket.accept()
    print(f"Connection from {addr}")
    client_socket.send(b"Hello, Client!")
    client_socket.close()
客户端

import socket

client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('localhost', 8080))

message = client_socket.recv(1024)
print(message.decode())
client_socket.close()

代码解析

  1. import socket:导入 socket 模块。
  2. server_socket.bind((‘localhost’, 8080)):绑定服务器地址和端口。
  3. client_socket.connect((‘localhost’, 8080)):客户端连接服务器。

运行结果

服务器
Server is listening...
Connection from ('127.0.0.1', 12345)

客户端 

Hello, Client!

示例 5:网络爬虫

步骤

  1. 导入 requests 和 BeautifulSoup 模块。
  2. 发送 HTTP 请求获取网页内容。
  3. 使用 BeautifulSoup 解析网页内容。

代码

import requests
from bs4 import BeautifulSoup

url = 'http://example.com'
response = requests.get(url)

soup = BeautifulSoup(response.text, 'html.parser')
print(soup.title.string)

代码解析

  1. import requests:导入 requests 模块。
  2. from bs4 import BeautifulSoup:导入 BeautifulSoup 模块。
  3. response = requests.get(url):发送 HTTP 请求获取网页内容。
  4. soup = BeautifulSoup(response.text, ‘html.parser’):解析网页内容。

运行结果

Example Domain

示例 6:图形界面

步骤

  1. 导入 tkinter 模块。
  2. 创建一个简单的图形用户界面,包含标签和按钮。

代码

import tkinter as tk

def on_button_click():
    label.config(text="Button Clicked!")

app = tk.Tk()
app.title("Simple GUI")

label = tk.Label(app, text="Hello, Tkinter!")
label.pack()

button = tk.Button(app, text="Click Me", command=on_button_click)
button.pack()

app.mainloop()

代码解析

  1. import tkinter as tk:导入 tkinter 模块。
  2. def on_button_click():定义按钮点击事件处理函数。
  3. app = tk.Tk():创建主窗口。
  4. label = tk.Label(app, text=“Hello, Tkinter!”):创建标签。
  5. button = tk.Button(app, text=“Click Me”, command=on_button_click):创建按钮并绑定点击事件。

运行结果

一个简单的图形用户界面,包含一个标签和一个按钮。点击按钮后,标签文本会更新为 “Button Clicked!”。

示例 7:正则表达式

步骤

  1. 导入 re 模块。
  2. 编写一个函数 validate_email,使用正则表达式匹配电子邮件地址。

代码

import re

def validate_email(email):
    pattern = r'^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$'
    return re.match(pattern, email) is not None

emails = ["test@example.com", "invalid-email", "another.test@domain.org"]
for email in emails:
    print(f"{email} is valid: {validate_email(email)}")

代码解析

  1. import re:导入 re 模块。
  2. def validate_email(email):定义验证电子邮件地址的函数。
  3. re.match(pattern, email):使用正则表达式匹配电子邮件地址。

运行结果

test@example.com is valid: True
invalid-email is valid: False
another.test@domain.org is valid: True

示例 8:单链表

步骤

  1. 定义节点类 Node
  2. 定义单链表类 SinglyLinkedList,实现插入、删除和查找操作。

代码

class Node:
    def __init__(self, data):
        self.data = data
        self.next = None

class SinglyLinkedList:
    def __init__(self):
        self.head = None

    def insert(self, data):
        new_node = Node(data)
        new_node.next = self.head
        self.head = new_node

    def delete(self, key):
        temp = self.head
        if temp is not None:
            if temp.data == key:
                self.head = temp.next
                temp = None
                return

        while temp is not None:
            if temp.data == key:
                break
            prev = temp
            temp = temp.next

        if temp == None:
            return

        prev.next = temp.next
        temp = None

    def search(self, key):
        temp = self.head
        while temp:
            if temp.data == key:
                return True
            temp = temp.next
        return False

    def print_list(self):
        temp = self.head
        while temp:
            print(temp.data, end=' ')
            temp = temp.next
        print()

# Example usage
sll = SinglyLinkedList()
sll.insert(3)
sll.insert(2)
sll.insert(1)
sll.print_list()  # 输出1 2 3
print(sll.search(2))  # 输出True
sll.delete(2)
sll.print_list()  # 输出1 3

代码解析

  1. class Node:定义节点类 Node,包含数据和指向下一个节点的指针。
  2. class SinglyLinkedList:定义单链表类 SinglyLinkedList,包含头节点。
  3. def insert(self, data):定义插入节点的方法,将新节点插入到链表头部。
  4. def delete(self, key):定义删除节点的方法,根据键值删除节点。
  5. def search(self, key):定义查找节点的方法,根据键值查找节点。
  6. def print_list(self):定义打印链表的方法,打印链表中的所有节点。

运行结果

# Example usage
sll = SinglyLinkedList()
sll.insert(3)
sll.insert(2)
sll.insert(1)
sll.print_list()  # 输出1 2 3
print(sll.search(2))  # 输出True
sll.delete(2)
sll.print_list()  # 输出1 3
1 2 3 
True
1 3 

示例 9:双链表

步骤

  1. 定义节点类 Node
  2. 定义双链表类 DoublyLinkedList,实现插入、删除和查找操作。

代码

class Node:
    def __init__(self, data):
        self.data = data
        self.next = None
        self.prev = None

class DoublyLinkedList:
    def __init__(self):
        self.head = None

    def insert(self, data):
        new_node = Node(data)
        new_node.next = self.head
        if self.head is not None:
            self.head.prev = new_node
        self.head = new_node

    def delete(self, key):
        temp = self.head
        while temp:
            if temp.data == key:
                if temp.prev:
                    temp.prev.next = temp.next
                if temp.next:
                    temp.next.prev = temp.prev
                if temp == self.head:
                    self.head = temp.next
                temp = None
                return
            temp = temp.next

    def search(self, key):
        temp = self.head
        while temp:
            if temp.data == key:
                return True
            temp = temp.next
        return False

    def print_list(self):
        temp = self.head
        while temp:
            print(temp.data, end=' ')
            temp = temp.next
        print()

# Example usage
dll = DoublyLinkedList()
dll.insert(3)
dll.insert(2)
dll.insert(1)
dll.print_list()  # 输出1 2 3
print(dll.search(2))  # 输出True
dll.delete(2)
dll.print_list()  # 输出1 3

代码解析

  1. class Node:定义节点类 Node,包含数据和指向前后节点的指针。
  2. class DoublyLinkedList:定义双链表类 DoublyLinkedList,包含头节点。
  3. def insert(self, data):定义插入节点的方法,将新节点插入到链表头部。
  4. def delete(self, key):定义删除节点的方法,根据键值删除节点。
  5. def search(self, key):定义查找节点的方法,根据键值查找节点。
  6. def print_list(self):定义打印链表的方法,打印链表中的所有节点。

运行结果

# Example usage
dll = DoublyLinkedList()
dll.insert(3)
dll.insert(2)
dll.insert(1)
dll.print_list()  # 输出1 2 3
print(dll.search(2))  # 输出True
dll.delete(2)
dll.print_list()  # 输出1 3
1 2 3 
True
1 3 

示例 10:哈希表

步骤

  1. 定义哈希表类 HashTable
  2. 实现插入、删除和查找操作。

代码

class HashTable:
    def __init__(self, size):
        self.size = size
        self.table = [None] * size

    def hash_function(self, key):
        return hash(key) % self.size

    def insert(self, key, value):
        index = self.hash_function(key)
        self.table[index] = value

    def delete(self, key):
        index = self.hash_function(key)
        self.table[index] = None

    def search(self, key):
        index = self.hash_function(key)
        return self.table[index]

    def print_table(self):
        for i in range(self.size):
            print(f"Index {i}: {self.table[i]}")

# Example usage
ht = HashTable(10)
ht.insert("key1", "value1")
ht.insert("key2", "value2")
ht.print_table()  # 输出哈希表内容
print(ht.search("key1"))  # 输出"value1"
ht.delete("key1")
ht.print_table()  # 输出哈希表内容

代码解析

  1. class HashTable:定义哈希表类 HashTable
  2. def init(self, size):初始化哈希表,设置大小并创建表。
  3. def hash_function(self, key):定义哈希函数,根据键值计算索引。
  4. def insert(self, key, value):定义插入方法,将键值对插入哈希表。
  5. def delete(self, key):定义删除方法,根据键值删除哈希表中的元素。
  6. def search(self, key):定义查找方法,根据键值查找哈希表中的元素。
  7. def print_table(self):定义打印哈希表的方法,打印哈希表中的所有元素。

运行结果

# Example usage
ht = HashTable(10)
ht.insert("key1", "value1")
ht.insert("key2", "value2")
ht.print_table()  # 输出哈希表内容
print(ht.search("key1"))  # 输出"value1"
ht.delete("key1")
ht.print_table()  # 输出哈希表内容
Index 0: None
Index 1: None
Index 2: None
Index 3: None
Index 4: None
Index 5: None
Index 6: None
Index 7: value1
Index 8: value2
Index 9: None
value1
Index 0: None
Index 1: None
Index 2: None
Index 3: None
Index 4: None
Index 5: None
Index 6: None
Index 7: None
Index 8: value2
Index 9: None

总结

通过这篇博客文章,你学会了如何使用 Python 实现一些常见的编程示例,包括计算最小公倍数和最大公约数、多线程编程、TCP/IP 客户端服务器、网络爬虫、图形界面、正则表达式、单链表、双链表和哈希表。我们逐步讲解了代码的实现,包括步骤、代码解析和运行结果。你可以根据需要修改和扩展这些示例,以实现更多的功能。

相关类型推荐

  • Python 数据结构与算法
  • Python 网络编程入门
  • Python 多线程编程指南

希望这个详细的讲解对你有所帮助!如果你有任何问题或需要进一步的帮助,请随时告诉我。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LIY若依

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值