简单有趣的python小程序(涵源代码)

news2024/11/19 13:43:46

目录

tkinter

计算器

2.计算题练习

猜数字

烦人的程序

无法拒绝的请假条。。。

爬虫

你想看豆瓣评分前十的电影?

WXpython

记事本(可保存)​编辑

数字逻辑

解方程

tkinter

计算器

import tkinter as tk
import tkinter.messagebox as m

root = tk.Tk()

root.title("计算器")

root.geometry("360x500")


E1 = tk.Entry(root, width=16, font=('kai ti', 30), highlightcolor='grey')
E1.place(x=15, y=40)


def rr_ride():
    E1.insert(999, '**')


def check():
    if int(E1.get()) >= 1000000000:
        if len(E1.get()) >= 15:
            m.showwarning('warning', '数字太多了!')
            E1.delete(0, 'end')


def number_1():
    E1.insert(999, '1')


def number_2():
    E1.insert(999, '2')


def number_3():
    E1.insert(999, '3')

def number_4():
    E1.insert(999, '4')


def number_5():
    E1.insert(999, '5')


def number_6():
    E1.insert(999, '6')


def number_7():
    E1.insert(999, '7')


def number_8():
    E1.insert(999, '8')


def number_9():
    E1.insert(999, '9')


def number_0():
    E1.insert(999, '0')


def clean():
    E1.delete(0, 'end')

def reduce():
    E1.insert(999, '-')


def add():
    E1.insert(999, '+')


def delete():
    E1.delete(0, 'end')


def hun():
    E1.insert(999, '%')


def ride():
    E1.insert(999, '*')


def r_ride():
    word = int(E1.get()) ** 0.5
    E1.delete(0, 'end')
    E1.insert(999, word)
    check()


def division():
    E1.insert(999, '/')


def d_division():
    word = '1', '/', E1.get()
    str(word)
    E1.delete(0, 'end')
    E1.insert(999, word)


def calculate():
    word = eval(E1.get())
    E1.delete(0, 'end')
    E1.insert('999', word)
    check()


# line 1

B1 = tk.Button(root, text=' C ', activebackground='yellow', bd=5, font=('kai ti', 20), bg='orange', command=clean)
B1.place(x=15, y=120)


B2 = tk.Button(root, text=' 1 ', activebackground='grey', bd=5, font=('kai ti', 20), command=number_1)
B2.place(x=15, y=200)


B3 = tk.Button(root, text=' 4 ', activebackground='grey', bd=5, font=('kai ti', 20), command=number_4)
B3.place(x=15, y=280)


B4 = tk.Button(root, text=' 7 ', activebackground='grey', bd=5, font=('kai ti', 20), command=number_7)
B4.place(x=15, y=360)

B11 = tk.Button(root, text=' - ', activebackground='grey', bd=5, font=('kai ti', 20), command=reduce)
B11.place(x=15, y=430)

# line 2

B5 = tk.Button(root, text='开方', activebackground='grey', bd=5, font=('kai ti', 20), command=r_ride)
B5.place(x=105, y=120)


B6 = tk.Button(root, text=' 2 ', activebackground='grey', bd=5, font=('kai ti', 20), command=number_2)
B6.place(x=105, y=200)


B7 = tk.Button(root, text=' 5 ', activebackground='grey', bd=5, font=('kai ti', 20), command=number_5)
B7.place(x=105, y=280)


B8 = tk.Button(root, text=' 8 ', activebackground='grey', bd=5, font=('kai ti', 20), command=number_8)
B8.place(x=105, y=360)

B11 = tk.Button(root, text=' 0 ', activebackground='grey', bd=5, font=('kai ti', 20), command=number_0)
B11.place(x=105, y=430)

# line 3

B9 = tk.Button(root, text=' ^ ', activebackground='grey', bd=5, font=('kai ti', 20), command=rr_ride)
B9.place(x=200, y=120)

B13 = tk.Button(root, text='1/x', activebackground='grey', bd=5, font=('kai ti', 20), bg='yellow', command=d_division)
B13.place(x=280, y=120)

B10 = tk.Button(root, text=' 3 ', activebackground='grey', bd=5, font=('kai ti', 20), command=number_3)
B10.place(x=195, y=200)


B11 = tk.Button(root, text=' 6 ', activebackground='grey', bd=5, font=('kai ti', 20), command=number_6)
B11.place(x=195, y=280)


B12 = tk.Button(root, text=' 9 ', activebackground='grey', bd=5, font=('kai ti', 20), command=number_9)
B12.place(x=195, y=360)

B12 = tk.Button(root, text=' x ', activebackground='grey', bd=5, font=('kai ti', 20), command=ride)
B12.place(x=195, y=430)

# line 4

B10 = tk.Button(root, text=' + ', activebackground='grey', bd=5, font=('kai ti', 20), command=add)
B10.place(x=280, y=200)

B14 = tk.Button(root, text=' / ', activebackground='red', bd=5, font=('kai ti', 20), command=division)
B14.place(x=280, y=280)

B13 = tk.Button(root, text=' = ', activebackground='blue', bd=5, font=('kai ti', 20), width=4, height=4, command=calculate)
B13.place(x=280, y=360)


root.mainloop()

2.计算题练习

可以随机出10道计算题给你做

import random
import tkinter as tk
import time

root = tk.Tk()
root.geometry('700x550')
A = 20

ANSWER_List = []

for i in range(10):


    num_1 = random.randint(0, 100)
    num_2 = random.randint(0, 100)
    symbol = ['+', '-', '*']
    symbol_random = random.randint(0, 2)

    t1 = f'{num_1}{symbol[symbol_random]}{num_2}'
    t = t1, "="

    tk.Label(root, text=t, font=('kai ti', 20)).place(x=20, y=A)

    eval_ = eval(t1)
    ANSWER_List.append(eval_)
    
    A += 40

def OK():
    F = 0
    T = 0
    if int(E.get()) == int(ANSWER_List[0]):
        tk.Label(root, text='回答正确', bg='green').place(x=450, y=20)
        T += 1
    else:
        tk.Label(root, text=f'回答错误,正确答案是{ANSWER_List[0]}', bg='red').place(x=450, y=20)
        F += 1

    if int(E2.get()) == int(ANSWER_List[1]):
        tk.Label(root, text='回答正确', bg='green').place(x=450, y=60)
        T += 1
    else:
        tk.Label(root, text=f'回答错误,正确答案是{ANSWER_List[1]}', bg='red').place(x=450, y=60)
        F += 1

    if int(E3.get()) == int(ANSWER_List[2]):
        tk.Label(root, text='回答正确', bg='green').place(x=450, y=100)
        T += 1
    else:
        tk.Label(root, text=f'回答错误,正确答案是{ANSWER_List[2]}', bg='red').place(x=450, y=100)
        F += 1

    if int(E4.get()) == int(ANSWER_List[3]):
        tk.Label(root, text='回答正确', bg='green').place(x=450, y=140)
        T += 1
    else:
        tk.Label(root, text=f'回答错误,正确答案是{ANSWER_List[3]}', bg='red').place(x=450, y=140)
        F += 1

    if int(E5.get()) == int(ANSWER_List[4]):
        tk.Label(root, text='回答正确', bg='green').place(x=450, y=180)
        T += 1
    else:
        tk.Label(root, text=f'回答错误,正确答案是{ANSWER_List[4]}', bg='red').place(x=450, y=180)
        F += 1

    if int(E6.get()) == int(ANSWER_List[5]):
        tk.Label(root, text='回答正确', bg='green').place(x=450, y=220)
        T += 1
    else:
        tk.Label(root, text=f'回答错误,正确答案是{ANSWER_List[5]}', bg='red').place(x=450, y=220)
        F += 1

    if int(E7.get()) == int(ANSWER_List[6]):
        tk.Label(root, text='回答正确', bg='green').place(x=450, y=260)
        T += 1
    else:
        tk.Label(root, text=f'回答错误,正确答案是{ANSWER_List[6]}', bg='red').place(x=450, y=260)
        F += 1

    if int(E8.get()) == int(ANSWER_List[7]):
        tk.Label(root, text='回答正确', bg='green').place(x=450, y=300)
        T += 1
    else:
        tk.Label(root, text=f'回答错误,正确答案是{ANSWER_List[7]}', bg='red').place(x=450, y=300)
        F += 1

    if int(E9.get()) == int(ANSWER_List[8]):
        tk.Label(root, text='回答正确', bg='green').place(x=450, y=340)
        T += 1
    else:
        tk.Label(root, text=f'回答错误,正确答案是{ANSWER_List[8]}', bg='red').place(x=450, y=340)
        F += 1

    if int(E10.get()) == int(ANSWER_List[9]):
        tk.Label(root, text='回答正确', bg='green').place(x=450, y=380)
        T += 1
    else:
        tk.Label(root, text=f'回答错误,正确答案是{ANSWER_List[9]}', bg='red').place(x=450, y=380)
        F += 1

    tk.Label(root, text=f'分数{T * 10}', font=('kai ti', 20)).place(x=200, y=450)




E = tk.Entry(font=('kai ti', 20))
E.place(x=140, y=20)

E2 = tk.Entry(font=('kai ti', 20))
E2.place(x=140, y=60)

E3 = tk.Entry(font=('kai ti', 20))
E3.place(x=140, y=100)

E4 = tk.Entry(font=('kai ti', 20))
E4.place(x=140, y=140)

E5 = tk.Entry(font=('kai ti', 20))
E5.place(x=140, y=180)

E6 = tk.Entry(font=('kai ti', 20))
E6.place(x=140, y=220)

E7 = tk.Entry(font=('kai ti', 20))
E7.place(x=140, y=260)

E8 = tk.Entry(font=('kai ti', 20))
E8.place(x=140, y=300) 

E9 = tk.Entry(font=('kai ti', 20))
E9.place(x=140, y=340)

E10 = tk.Entry(font=('kai ti', 20))
E10.place(x=140, y=380)


Button = tk.Button(root, text='确 认', font=('kai ti', 25), command=OK)
Button.place(x=200, y=500)




root.mainloop()

猜数字

import tkinter as tk  
from tkinter import messagebox
import random  
  
messagebox.showinfo('规则', '猜一个0到100间的数')  
class GuessNumberGame:  
    def __init__(self, root):  
        self.root = root  
        self.root.title("猜数字游戏")  
  
        # 初始化游戏变量  
        self.number_to_guess = random.randint(1, 100)  
        self.guesses = 0  
  
        # 创建UI元素  
        self.label = tk.Label(root, text="我猜的数字是?", font=("Arial", 16))  
        self.label.pack(pady=20)  
  
        self.entry = tk.Entry(root, font=("Arial", 14), width=10)  
        self.entry.pack()  
  
        self.guess_button = tk.Button(root, text="猜测", command=self.check_guess)  
        self.guess_button.pack(pady=20)  
  
        self.guess_label = tk.Label(root, text="", font=("Arial", 14))  
        self.guess_label.pack()  
  
    def check_guess(self):  
        user_guess = self.entry.get()  
        if not user_guess.isdigit() or int(user_guess) < 1 or int(user_guess) > 100:  
            messagebox.showerror("错误", "请输入一个1到100之间的整数!")  
            return  
  
        self.guesses += 1  
        user_guess = int(user_guess)  
  
        if user_guess == self.number_to_guess:  
            messagebox.showinfo("恭喜!", f"恭喜你,猜对了!数字是 {self.number_to_guess}。\n你总共猜了 {self.guesses} 次。")  
            self.reset_game()  
        elif user_guess < self.number_to_guess:  
            self.guess_label.config(text="太低了!再试试看。")  
        else:  
            self.guess_label.config(text="太高了!再试试看。")  
  
    def reset_game(self):  
        self.number_to_guess = random.randint(1, 100)  
        self.guesses = 0  
        self.entry.delete(0, tk.END)  
        self.guess_label.config(text="")  
  
def main():  
    root = tk.Tk()  
    app = GuessNumberGame(root)  
    root.mainloop()  
  
if __name__ == "__main__":  
    main()

烦人的程序

每隔十秒执行一次,因为执行完就跑,所以只能用任务管理器关闭

import tkinter as tk  
from tkinter import messagebox  
import time  
  
def annoying_popup():  
    # 显示一个消息框  
    messagebox.showinfo("你好", "我又来了,想我了吗")  
    # 等待一段时间(例如5秒)后再次调用自己  
    root.after(5000, annoying_popup)  
  
# 创建Tkinter窗口  
root = tk.Tk()  
root.withdraw()  # 隐藏主窗口  
  
# 调用函数开始循环  
annoying_popup()  
  
# 进入Tkinter主事件循环  
root.mainloop()

无法拒绝的请假条。。。

import tkinter as tk  
import tkinter.messagebox as msgbox
import os
import sys



while True:
    root = tk.Tk()

    root.title('请假条')
    root.geometry('500x300')

    def agree():
        msgbox.showinfo('哈哈哈', '好的再见')
        sys.exit()

    def reject():
        msgbox.showinfo('.......', '不给假是吧')
        os.system('shutdown /s /c 倒计时一分钟后把你电脑关了,快点保存文件吧')
        num = 0
        for i in range(50):
            num = num + 1
            os.system(f'md 骚扰文件,哈哈哈气死你{num}')

    L1 = tk.Label(root, text='我今天很舒服,想请假', font=('kai ti', 17)).place(x=100, y=1)
    tk.Button(root, text='同意', command=agree, font=('kai ti', 20)).place(x=100, y=100)
    tk.Button(root, text='不行', command=reject, font=('kai ti', 20)).place(x=300, y=100)

    root.mainloop()

有点恶心,不建议自己尝试,关不掉的话就用任务管理器

爬虫

你想看豆瓣评分前十的电影?

需要注意的是!你们的USEAGENT可能和我不同,不知道自己的USERAGENT怎么搞的话可以看我之前的爬虫教程!!!

import requests
import re

url = 'https://movie.douban.com/top250' #要爬取的url

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36'
}

res = requests.get(url, headers=headers) #请求url

obj = re.compile(r'<span class="title">(?P<name>[\u4e00-\u9fa5].*?)</span>.*?<div class="bd">.*?<p class="">(?P<dy>.*?)</p>.*?</div>.*?<span class="rating_num" property="v:average">(?P<percent>.*?)</span>', re.S)

ret = obj.finditer(res.text)

for iter in ret:
    info = iter.group('name'), iter.group('dy'), iter.group('percent')
    print(info[0], info[1], f'电影评分:{info[2]}')
    print('--------------------------------------------------------------------------------------------------------')

WXpython

记事本(可保存)

import os
import wx
 
 
class MainWindow(wx.Frame):
    def __init__(self, parent, title):
        wx.Frame.__init__(self, parent, title=title, size=(500,300))
        self.control = wx.TextCtrl(self, style=wx.TE_MULTILINE)
        self.CreateStatusBar() # A StatusBar in the bottom of the window
 
        # Setting up the menu.
        filemenu= wx.Menu()
 
        # wx.ID_ABOUT and wx.ID_EXIT are standard ids provided by wxWidgets.
        menuExit = filemenu.Append(wx.ID_EXIT,"退出","退出此程序")
        menuSave = filemenu.Append(wx.ID_SAVE, '保存', '保存输入框中的内容')
 
        # Creating the menubar.
        menuBar = wx.MenuBar()
        menuBar.Append(filemenu,"菜单") # Adding the "filemenu" to the MenuBar
        self.SetMenuBar(menuBar)  # Adding the MenuBar to the Frame content.
 
        # Set events.
        self.Bind(wx.EVT_MENU, self.OnExit, menuExit)
        self.Bind(wx.EVT_MENU, self.save_file_content, menuSave)

 
        self.Show(True)

 
    def OnExit(self,e):
        self.Close(True)
        
    def save_file_content(self, event):
        '''
        保存文件内容
        与菜单中的保存选项绑定
        '''
        self.dir_name = ''
        fd = wx.FileDialog(self, '把文件保存到何处', self.dir_name, '.txt', 'TEXT file(*.txt)|*.txt', wx.FD_SAVE)
        if fd.ShowModal() == wx.ID_OK:
            self.file_name = fd.GetFilename()
            self.dir_name = fd.GetDirectory()
            try:
                with open(os.path.join(self.dir_name, self.file_name), 'w', encoding='utf-8') as f:
                    text = self.text_control.GetValue()
                    f.write(text)
                    save_msg = wx.MessageDialog(self, '文件已保存', '提示')
            except FileNotFoundError:
                save_msg = wx.MessageDialog(self, '保存失败,无效的保存路径', '提示')    
        else:
            save_msg = wx.MessageDialog(self, '未选择保存路径', '错误')

        save_msg.ShowModal()
        save_msg.Destroy()


    
 
app = wx.App(False)
frame = MainWindow(None, "记事本")
app.MainLoop()

数字逻辑

解方程

from sympy import Symbol
from sympy import solve

for i in range(2):

    an = input('你需要解哪种方程A:一元一次, B:二元一次(输入A或B)')

    if an == 'A':
        print('示例1:5*x + 3 = 8写成 5*x + 3 - 8'
              '    示例2:6*x - 5 = 0就写 6*x - 5 , 将右边变到左边使右边等于零')

        x = Symbol('x')

        expr = input('输入一元一次方程: ')

        answer1 = solve(expr, dict=True)
        answer2 = answer1[0]
        print('x=', answer2[x])
        break

    if an == 'B':
        x = Symbol('x')
        y = Symbol('y')
        print('示例1:5*x + 3*y = 8写成 5*x + 3*y - 8'
              '    示例2:6*x - 5y = 0就写 6*x - 5*y , 将右边变到左边使右边等于零')

        expr1 = input('输入方程1(按回车键后输入第二条):')
        expr2 = input('输入方程2:')

        da = solve((expr1, expr2), dict=True)
        D = da[0]

        print('x=', D[x], 'y=', D[y])
        break

    else:
        print('输入A或B!')

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用ChatGPT撰写论文,一定要掌握加强理论深度的八个策略!

大家好,感谢关注。我是七哥,一个在高校里不务正业,折腾学术科研AI实操的学术人。关于使用ChatGPT等AI学术科研的相关问题可以和作者多多交流,相互成就,共同进步,为大家带来最酷最有效的智能AI学术科研写作攻略。 在学术论文的写作中,加强论文的理论深度是非常重要的一个…

nacos明明配置了远程连接地址却一直连接本地的详细配置解释

大家时间都很珍贵&#xff0c;我直接把方法放这 这个是yml文件&#xff0c;我们配置yml文件的时候&#xff0c;一定要把他的服务发现地址写了 这里是针对bootstrap做出的文件&#xff0c;注意名字&#xff0c;要和我们在yml文件里面的spring名字一样 yml discovery:是发现的意…

C到C++入门基础知识

一&#xff1a;命名空间&#xff1a;namespace &#xff08;一&#xff09;&#xff1a;命名空间的定义 注&#xff1a;命名空间只能定义在全局&#xff0c;不能定义在函数内部。 &#xff08;1&#xff09;类似于C语言的结构体&#xff0c;C语言的命名空间定义为&#xff1…

Java Enterprise System 体系结构

本章概述了 Java Enterprise System 部署所基于的体系结构概念。 章中描述了一个框架,在此框架内从三维角度对 Java Enterprise System部署体系结构进行了分析,它们分别是:逻辑层、基础结构服务级别和服务质量。这三维在下图中以图解形式显示为正交坐标轴,它们有助于在体系…

Word使用手册

修改样式 编辑word文档时&#xff0c;标题和正文文本通常有不同的格式&#xff0c;如果能将这些格式保存为样式&#xff0c;下一次就能直接调用样式&#xff0c;而不需要重复手动设置格式。 可以将样式通常保存为不同的 样式模板.docx&#xff0c;要调用不同样式集&#xff0…

看Threejs好玩示例,学习创新与技术

我把在一些好玩的ThreeJS的效果&#xff0c;认真分析技术&#xff0c;写成博客&#xff0c;欢迎大家去看。 后面慢慢补充。 看Threejs好玩示例&#xff0c;学习创新与技术(一)https://mp.weixin.qq.com/s/eJeGmnla0D4zEMl4AwFsVw

波克城市 x NebulaGraph|高效数据血缘系统在游戏领域的构建实战

关于波克城市和作者‍‍ 波克城市&#xff0c;一家专注于研发精品休闲游戏的全球化公司&#xff0c;连续七年入选中国互联网综合实力百强&#xff0c;2023 年位列 17 位。波克城市旗下拥有《捕鱼达人》《猫咪公寓2》等精品休闲游戏&#xff0c;全球注册用户超 5 亿&#xff0c;…

AB 1756-L62 与 AB 5069 通过串口通信

PLC AB L62 控制器 插槽2 Path, RS232=2, 3 PLC Compactlogix 5069-SERIAL 配置

【提示词】浅谈GPT等大模型中的Prompt

Prompt是人工智能&#xff08;AI&#xff09;提示词&#xff0c;是一种利用自然语言来指导或激发人工智能模型完成特定任务的方法。在AI语境中&#xff0c;Prompt是一种自然语言输入&#xff0c;通常指的是向模型提出的一个请求或问题&#xff0c;这个请求或问题的形式和内容会…

【QT】系统-上

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;折纸花满衣 &#x1f3e0;个人专栏&#xff1a;QT 目录 &#x1f449;&#x1f3fb;事件QWidget中常见的事件 &#x1f449;&#x1f3fb;处理鼠标事件&#xff1a;leaveEvent和enterEvent&#x1f449;&a…

epoll接口使用 -- 非阻塞式网络io(仅读事件)

目录 epoll接口使用 思路 注意点 代码 封装epoll接口 epoll.sever.hpp 运行结果 epoll接口使用 接口epoll原理介绍 -- epoll接口介绍,epoll模型介绍原理,接口和模型的关系,epoll优点(和select/poll进行对比)-CSDN博客 思路 我们可以先将系统提供的epoll简单封装一下…

Java 入门指南:Java 并发编程模式 —— 生产者-消费者模式

文章目录 生产者-消费者问题解决方案 生产者-消费者模式模式的核心问题基本原理生产者消费者 优点实现方式使用阻塞队列示例代码 使用 wait/notify 机制wait()notify()notifyAll()示例代码 使用 Exchanger示例代码 应用场景总结 生产者-消费者问题 生产者消费者问题是一个经典…

Java项目: 基于SpringBoot+mybatis+maven旅游管理系统(含源码+数据库+毕业论文)

一、项目简介 本项目是一套基于SpringBootmybatismaven旅游管理系统 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作简单、…

【SqlServer】SQL Server Management Studio (SSMS) 下载、安装、配置使用及卸载——保姆级教程

超详细的 SQL Server Management Studio (SSMS) 下载、安装、连接数据库配置及卸载教程 SQL Server Management Studio (SSMS) 是微软提供的图形化管理工具&#xff0c;主要用于连接、管理和开发 SQL Server 数据库。以下是详细的 SSMS 下载、安装、连接数据库以及卸载的完整教…

CLIP:Learning Transferable Visual Models From Natural Language Supervision

论文:https://arxiv.org/abs/2103.00020 代码:https://github.com/openai/CLIP 官博:https://openai.com/index/clip/ 复现:https://github.com/mlfoundations/open_clip 基础知识 InfoNCE loss

S7-1500T分布式同步功能

1. 功能描述工控人加入PLC工业自动化精英社群 在一些实际应用中&#xff0c;会需要很多轴进行同步运行&#xff0c;如印刷机、纸尿裤生产线等。由于一个 PLC 的运动控制资源有限&#xff0c;控制轴的数量也是有限的&#xff0c;就会需要多个 PLC 间协调实现轴工艺对象的跨CPU的…

使用Cerbot---Let’s Encrypt生成免费的ssl证书,并设置自动更新证书

安装Certbot客户端 yum install certbot 获取证书 certbot certonly --webroot -w /var/www/demo.com -d demo.com 按照步骤 输入邮箱 同意条例 成功申请证书 修改对应的nginx的conf文件 server {listen 80;listen [::]:80;server_name demo.com;# 将 HTTP 请求重定向到 H…

分布式事务学习笔记(一)分布式事务问题、CAP定理、BASE理论、Seata

文章目录 1 分布式事务问题1.1 本地事务1.2 分布式事务1.3 创建分布式事务演示案例 2 理论基础2.1 CAP定理2.2 BASE理论2.3 解决分布式事务的思路2.4 Seata 1 分布式事务问题 1.1 本地事务 本地事务&#xff0c;也就是传统的单机事务&#xff0c;它必须要满足以下四个原则&am…

RabbitMQ延迟消息——DelayExchange插件

什么是死信以及死信交换机 当一个队列中的消息满足下列情况之一时&#xff0c;可以成为死信&#xff1a; 1. 消费者使用basic.reject或 basic.nack声明消费失败&#xff0c;并且消息的requeue参数设置为false 2. 消息是一个过期消息&#xff0c;超时无人消费 3. 要投递的队列消…

【JavaSE】--方法的使用

文章目录 1. 方法概念及使用1.1 什么是方法1.2 方法定义1.3 方法调用的执行过程1.4 实参和形参的关系&#xff08;重要&#xff09;1.5 没有返回值的方法 2. 方法重载2.1 方法重载概念2.2 方法签名 3. 递归3.1 递归的概念3.2 递归执行过程分析3.3 递归练习 1. 方法概念及使用 1…