python实现屏幕录制,录音录制工具

news2024/10/18 12:06:39

python实现屏幕录制,录音录制工具

一,介绍

        Python 实现的屏幕录制和录音录制工具是一个便捷的应用程序,旨在帮助用户同时捕捉计算机屏幕上的活动以及与之相关的音频输出。这个工具尤其针对教育工作者、内容创作者、技术支持人员以及任何需要展示互动过程或共享实时演示的用户。

二,主要功能

  1. 屏幕录制:捕捉整个屏幕或指定区域的视频,能够以 AVI 或 MP4 等格式保存。
  2. 音频录制:能够选择录制系统音(计算机播放的音频)或外部环境声音(通过麦克风录制的声音),并将其保存为 WAV 格式文件。
  3. 多线程执行:实现屏幕录制与音频录制并行进行,确保同时捕捉视觉和听觉信息。
  4. 用户友好的图形界面:使用 Tkinter 库创建简单直观的用户界面,便于用户操作和设置录制参数。

1.作用

  1. 教育与培训:教师可以录制在线课程、课程演示或教学内容,方便学生回看和复习。
  2. 演示与演讲:讲师或营销人员可以创建产品演示和视频演讲,便于直观展示功能和效果。
  3. 技术支持与远程协助:技术支持人员可以记录故障排除过程,帮助用户解决问题,同时提供反馈和解决方案。
  4. 内容创作:内容创造者(如YouTuber和博主)可以制作视频教程、评论和游戏实况,增强与观众的互动。

2.目的

        这个工具的主要目的是为用户提供一种高效、简便的方式来创建与记录屏幕活动和音频内容,减少传统录制过程中的复杂性,使制作视频内容变得更加可及与灵活。此外,此工具帮助用户以更直观、生动的方式记录和分享他们的工作或创意,有助于知识传播和信息共享。

        通过集成屏幕录制与音频录制的功能,用户能够更全面地展现信息,提高内容的质量和吸引力,符合当今数字化学习与远程工作的需求。

三,用python实现录音功能 

import tkinter as tk  
# 导入 tkinter 库,用于创建图形用户界面 (GUI)。  

from tkinter import filedialog, messagebox  
# 从 tkinter 中导入文件选择对话框和消息框。  

import pyaudio  
# 导入 pyaudio 库,用于音频录制。  

import wave  
# 导入 wave 库,用于保存音频为 WAV 格式。  

import sounddevice as sd  
# 导入 sounddevice 库,用于录制系统声音。  

import numpy as np  
# 导入 numpy 库,通常用于数值计算,但在这个例子中未明显使用。  

import soundfile as sf  
# 导入 soundfile 库,用于保存音频文件(如 WAV)。  

class AudioRecorderApp:  
    # 定义一个类 AudioRecorderApp,表示音频录制工具。  

    def __init__(self, root):  
        # 构造函数,初始化应用程序界面。  
        self.root = root  
        self.root.title("音频录制工具")  
        # 设置窗口标题。  

        self.record_option = tk.StringVar(value="external")  
        # 创建一个字符串变量,用于存储录音方式(外部音频或系统音频)。  

        self.duration = tk.IntVar(value=10)  
        # 创建一个整型变量用于存储录音时长,默认为10秒。  

        self.output_filename = None  
        # 初始化保存文件名为 None,稍后选择保存位置时会更新。  

        # 录音方式选择  
        tk.Label(root, text="选择录音方式:").pack(pady=10)  
        # 创建标签,提示用户选择录音方式。  

        tk.Radiobutton(root, text="外部环境声音", variable=self.record_option, value="external").pack(anchor=tk.W)  
        # 创建单选按钮,选择外部环境声音录制方式。  

        tk.Radiobutton(root, text="系统声音", variable=self.record_option, value="system").pack(anchor=tk.W)  
        # 创建单选按钮,选择系统声音录制方式。  

        # 录制时长输入  
        tk.Label(root, text="录音时长(秒):").pack(pady=10)  
        # 创建标签,提示用户输入录音时长。  

        tk.Entry(root, textvariable=self.duration).pack()  
        # 创建文本输入框,用户输入录音时长。  

        # 选择保存位置按钮  
        tk.Button(root, text="选择保存位置", command=self.select_output_file).pack(pady=10)  
        # 创建按钮,点击后选择保存文件的位置。  

        # 开始录音按钮  
        tk.Button(root, text="开始录音", command=self.start_recording).pack(pady=20)  
        # 创建按钮,点击后开始录音。  

    def select_output_file(self):  
        # 定义选择保存文件名的方法。  
        self.output_filename = filedialog.asksaveasfilename(defaultextension=".wav",  
                                                             filetypes=[("WAV files", "*.wav"),  
                                                                        ("All files", "*.*")])  
        # 弹出文件对话框,让用户选择保存的文件名和位置。  

        if self.output_filename:  
            messagebox.showinfo("选择成功", f"保存位置:{self.output_filename}")  
            # 如果用户选择了文件名,弹出提示框确认选择。  

    def start_recording(self):  
        # 定义开始录音的方法。  
        if not self.output_filename:  
            messagebox.showwarning("警告", "请先选择保存位置!")  
            # 如果未选择保存位置,弹出警告提示。  

            return  

        if self.record_option.get() == "external":  
            self.record_external_sound()  
            # 如果选择外部音频,调用外部音频录制函数。  

        else:  
            self.record_system_sound()  
            # 否则调用系统声音录制函数。  

    def record_external_sound(self):  
        # 定义外部声音录制的方法。  
        chunk = 4096  
        # 每次读取的音频数据块大小。  

        format = pyaudio.paInt16  
        # 设置音频格式为 16 位深度。  

        channels = 2  
        # 设置为立体声(两个通道)。  

        rate = 96000  
        # 设置采样率为 96 kHz。  

        duration = self.duration.get()  
        # 获取用户输入的录音时长。  

        p = pyaudio.PyAudio()  
        # 初始化 PyAudio。  

        stream = p.open(format=format,  
                        channels=channels,  
                        rate=rate,  
                        input=True,  
                        frames_per_buffer=chunk)  
        # 打开音频流进行录制。  

        frames = []  
        # 创建一个空列表,用于存储录音数据。  

        messagebox.showinfo("信息", "开始录制外部声音...")  
        # 弹出提示框,通知用户开始录音。  

        for _ in range(0, int(rate / chunk * duration)):  
            data = stream.read(chunk)  
            # 循环读取音频数据块。  

            frames.append(data)  
            # 将读取的数据块添加到 frames 列表中。  

        stream.stop_stream()  
        # 停止音频流。  

                stream.close()  
        # 关闭音频流。  
        
        p.terminate()  
        # 终止 PyAudio 会话,释放资源。  

        with wave.open(self.output_filename, 'wb') as wf:  
            # 以写入模式打开 WAV 文件。  
            wf.setnchannels(channels)  
            # 设置音频通道数。  

            wf.setsampwidth(p.get_sample_size(format))  
            # 设置样本宽度。  

            wf.setframerate(rate)  
            # 设置采样率。  

            wf.writeframes(b''.join(frames))  
            # 将所有录制的帧写入文件。  

        messagebox.showinfo("信息", "外部声音录制完成。")  
        # 弹出提示框,通知用户外部声音录制完成。  

    def record_system_sound(self):  
        # 定义录制系统声音的方法。  
        
        fs = 192000  
        # 设置采样率为 192 kHz。  

        duration = self.duration.get()  
        # 获取用户输入的录音时长。  

        messagebox.showinfo("信息", "开始录制系统声音...")  
        # 弹出提示框,通知用户开始录制系统声音。  

        audio = sd.rec(int(duration * fs), samplerate=fs, channels=2, dtype='float32', blocking=True)  
        # 使用 sounddevice 库录制音频,blocking=True 参数确保录制完成后再继续执行后面的代码。  

        sf.write(self.output_filename, audio, fs)  
        # 使用 soundfile 库将录制的音频保存为 WAV 文件。  

        messagebox.showinfo("信息", "系统声音录制完成。")  
        # 弹出提示框,通知用户系统声音录制完成。  

if __name__ == "__main__":  
    root = tk.Tk()  
    # 创建主窗口。  

    app = AudioRecorderApp(root)  
    # 初始化音频录制工具类。  

    root.mainloop()  
    # 启动 tkinter 事件循环,运行应用程序。

 运行结果:

 

代码功能概述

这段代码实现了一个简单的音频录制工具,用户可以选择录制外部环境声音或系统声音。它具有以下功能:

  1. 界面创建:使用 tkinter 创建图形用户界面,包括选择录音方式(外部音频或系统音频)、输入录音时长、选择保存文件位置和开始录音的按钮。

  2. 选择文件保存位置:用户可以通过文件对话框选择录音文件的存储路径及文件名。

  3. 录音

    • 外部声音录制:使用 PyAudio 库录制外部环境的声音,并将录制的数据保存为 WAV 文件。
    • 系统声音录制:使用 sounddevice 库录制系统声音并保存为 WAV 文件。
  4. 反馈提示:在录音开始和结束时,程序会通过消息框向用户提供相关信息和提示。

注意事项

  • 确保已安装所需的库:tkinterpyaudiowavesounddevicenumpysoundfile,可以通过 pip install 命令安装这些库。
  • 该代码适用于 Windows 和部分 Linux 系统,但在 macOS 上可能需要额外配置,因为音频流的访问权限可能会有所不同。
  • 录音时,确保已选择正确的录音设备以获得更好的音质。

四,用python实现录屏录音功能

 

import tkinter as tk  
# 导入 tkinter 库,创建图形用户界面(GUI)。  

from tkinter import filedialog, messagebox  
# 从 tkinter 导入文件对话框(filedialog)和消息框(messagebox)模块。这用于选择文件和显示异步消息。  

import pyaudio  
# 导入 PyAudio 库,用于音频输入/输出。  

import wave  
# 导入 Wave 库,用于处理 WAV 音频文件。  

import sounddevice as sd  
# 导入 sounddevice 库,用于进行系统声音的录制。  

import numpy as np  
# 导入 numpy 库,为数据处理提供支持。  

import cv2  
# 导入 OpenCV 库,用于图像处理和视频录制。  

import pyautogui  
# 导入 pyautogui 库,用于截屏。  

import threading  
# 导入 threading 库,用于创建多线程。  

class AudioRecorderApp:  
    # 定义一个类 AudioRecorderApp,表示音频录制工具应用。  

    def __init__(self, root):  
        # 构造函数,初始化应用程序界面。  
        self.root = root  
        self.root.title("音频录制工具")  
        # 设置窗口标题。  

        self.record_option = tk.StringVar(value="external")  
        # 创建一个字符串变量,存储录音方式,默认为“外部声音”。  

        self.duration = tk.IntVar(value=10)  
        # 创建一个整型变量,存储录音时长,默认为10秒。  

        self.output_filename = None  
        # 初始化输出文件名为 None,稍后选择保存路径时会更新。  

        self.is_recording = False  
        # 初始化录音状态为 False。  

        # 录音方式选择  
        tk.Label(root, text="选择录音方式:").pack(pady=10)  
        # 创建标签提示用户选择录音方式。  

        tk.Radiobutton(root, text="外部环境声音", variable=self.record_option, value="external").pack(anchor=tk.W)  
        # 创建单选按钮用于选择“外部环境声音”录制方式。  

        tk.Radiobutton(root, text="系统声音", variable=self.record_option, value="system").pack(anchor=tk.W)  
        # 创建单选按钮用于选择“系统声音”录制方式。  

        # 选择保存位置按钮  
        tk.Button(root, text="选择保存位置", command=self.select_output_file).pack(pady=10)  
        # 创建按钮,点击后选择保存文件的路径。  

        tk.Label(root, text="录音时长(秒):").pack(pady=10)  
        # 创建标签,指导用户输入录音时长。  

        tk.Entry(root, textvariable=self.duration).pack()  
        # 创建文本框,用户输入录音时长。  

        # 开始录音按钮  
        tk.Button(root, text="开始录音", command=self.start_recording).pack(pady=20)  
        # 创建按钮,点击后开始录音。  

    def select_output_file(self):  
        # 定义选择保存文件名的方法。  
        self.output_filename = filedialog.asksaveasfilename(defaultextension=".wav",  
                                                             filetypes=[("WAV files", "*.wav"),  
                                                                        ("所有文件", "*.*")])  
        # 弹出文件对话框,让用户选择保存的文件名和位置。  

        if self.output_filename:  
            messagebox.showinfo("选择成功", f"保存位置:{self.output_filename}")  
            # 如果用户选择了文件名,弹出提示框确认选择。  

    def start_recording(self):  
        # 定义开始录音的方法。  
        if not self.output_filename:  
            messagebox.showwarning("警告", "请先选择保存位置!")  
            # 如果未选择保存位置,弹出警告提示。  
            return  

        self.is_recording = True  
        duration_sec = self.duration.get()  
        # 获取用户输入的录音时长。  

        # 启动音频录制线程  
        audio_thread = threading.Thread(target=self.record_audio)  
        audio_thread.start()  
        # 创建一个新线程,运行录音函数。  

        # 启动屏幕录制线程  
        screen_thread = threading.Thread(target=self.record_screen)  
        screen_thread.start()  
        # 创建另一个线程,用于录制屏幕。  

        # 设置录制的持续时间  
        threading.Timer(duration_sec, self.stop_recording).start()  
        # 设置计时器,到达时间后停止录
        def record_audio(self):  
        # 定义录制音频的方法。  
        if self.record_option.get() == "external":  
            self.record_external_sound()  
        # 如果选项为“external”,则调用录制外部声音的方法。  
        elif self.record_option.get() == "system":  
            self.record_system_sound()  
        # 如果选项为“system”,则调用录制系统声音的方法。  

    def record_external_sound(self):  
        # 定义录制外部声音的方法。  
        chunk = 4096  
        # 设置每次读取的音频块大小。  
        format = pyaudio.paInt16  
        # 设置音频格式为16位整型。  
        channels = 2  
        # 设置音频通道数为2(立体声)。  
        rate = 44100  
        # 设置采样率为44100Hz。  
        duration = self.duration.get()  
        # 获取录音持续时间。  

        p = pyaudio.PyAudio()  
        # 创建 PyAudio 实例。  
        stream = p.open(format=format, channels=channels, rate=rate, input=True, frames_per_buffer=chunk)  
        # 打开音频流以进行录音。  
        frames = []  
        # 用于存储录制的音频帧。  

        messagebox.showinfo("信息", "开始录制外部声音...")  
        # 弹出提示框,通知用户开始录制。  
        for _ in range(0, int(rate / chunk * duration)):  
            # 根据设置的采样率和时长计算需循环的次数。  
            data = stream.read(chunk)  
            # 从音频流中读取音频数据。  
            frames.append(data)  
            # 将读取的数据添加到帧列表中。  

        stream.stop_stream()  
        # 停止音频流。  
        stream.close()  
        # 关闭音频流。  
        p.terminate()  
        # 终止 PyAudio 实例。  

        with wave.open(self.output_filename, 'wb') as wf:  
            # 使用 wave 模块以写入模式打开 WAV 文件。  
            wf.setnchannels(channels)  
            # 设置声道数。  
            wf.setsampwidth(p.get_sample_size(format))  
            # 设置采样宽度。  
            wf.setframerate(rate)  
            # 设置采样率。  
            wf.writeframes(b''.join(frames))  
            # 写入帧数据到文件。  

        messagebox.showinfo("信息", "外部声音录制完成。")  
        # 弹出提示框,表示录制完成。  

    def record_system_sound(self):  
        # 定义录制系统声音的方法。  
        fs = 192000  
        # 设置采样率为192000Hz。  
        duration = self.duration.get()  
        # 获取录音持续时间。  
        messagebox.showinfo("信息", "开始录制系统声音...")  
        # 弹出提示框,通知用户开始录制。  
        audio = sd.rec(int(duration * fs), samplerate=fs, channels=2, dtype='float32', blocking=True)  
        # 使用 sounddevice 库录制系统声音,设置时长、采样率、声道数和数据类型。  
        sf.write(self.output_filename, audio, fs)  
        # 将录制的数据写入指定文件。  
        messagebox.showinfo("信息", "系统声音录制完成。")  
        # 弹出提示框,表示录制完成。  

    def record_screen(self):  
        # 定义录制屏幕的方法。  
        output_file = self.output_filename.replace('.wav', '.avi')  # 保存为AVI格式  
        fourcc = cv2.VideoWriter_fourcc(*'XVID')  
        # 设置视频编码方式为 XVID。  
        fps = 20.0  
        # 设置帧率为20帧每秒。  
        screen_size = (1920, 1080)  # 根据您的屏幕分辨率调整  
        # 指定屏幕尺寸。  

        out = cv2.VideoWriter(output_file, fourcc, fps, screen_size)  
        # 创建 VideoWriter 对象,负责写入视频文件。  

        messagebox.showinfo("信息", "开始录制屏幕...")  
        # 弹出提示框,通知用户开始录制。  
        duration_sec = self.duration.get()  
        # 获取录制的持续时间。  
        for _ in range(int(duration_sec * fps)):  # 将fps转换为整数  
            img = pyautogui.screenshot()  # 截取屏幕  
            frame = cv2.cvtColor(np.array(img), cv2.COLOR_RGB2BGR)  # 转换为OpenCV格式  
            out.write(frame)  # 写入视频  
            cv2.waitKey(int(1000 / fps))  # 控制帧率  

        out.release()  # 释放视频文件  
        messagebox.showinfo("信息", "屏幕录制完成。")  
        # 弹出提示框,表示屏幕录制完成。  

    def stop_recording(self):  
        # 定义停止录制的方法。  
        self.is_recording = False  
        # 更新录音状态为 False。  
        messagebox.showinfo("信息", "录制已停止。")  
        # 弹出提示框,通知用户录制已停止。  

if __name__ == "__main__":  
    root = tk.Tk()  
    # 创建 Tkinter 窗口的根对象。  
    app = AudioRecorderApp(root)  
    # 创建 AudioRecorderApp 的实例,传入根对象。  
    root.mainloop()  
    # 启动 Tkinter 主事件循环,等待用户操作。

运行结果:

 

功能总结

以上代码是一个音频和屏幕录制工具的实现,主要功能包括:

  1. 选择录音方式:用户可以选择录制“外部环境声音”或“系统声音”。
  2. 选择保存位置:用户可以选择保存录制音频和视频的文件位置。
  3. 设置录音时长:用户可以输入录制的时长(以秒为单位)。
  4. 启动录制
    • 启动录制外部声音或系统声音。
    • 启动屏幕录制,录制屏幕内容并将其保存为 AVI 格式视频。
  5. 多线程支持:使用 Python 的线程库并行录制音频和屏幕,可以提高效率。
  6. 停止录制:可以在指定的时间后自动停止录制,或手动调用停止录制的函数。

使用此应用程序,用户可以轻松地录制音频和视频,创建教程或其他需要录制的内容。

 

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

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

相关文章

uniapp使用html2canvas时,页面内的image元素模糊

不废话很简单只需要将image改成img就行 改之前 改之后 原因可能是因为uniapp里面的image标签做了某种处理

信息搜集 --子域名

1.证书查询 通过ssl证书指纹在crt.sh |证书搜索网站搜索 这些就是证书一样的 2.fofa等空间测绘平台查询 3.dns查询 https://dnsdumpster.com/ 4.威胁情报中心 360 微步等等 5.枚举 暴力破解 工具推荐:oneforall GitHub - shmilylty/OneForAll: OneForAll是一款…

QUIC(Quick UDP Internet Connections)与 RTMP(Real Time Messaging Protocol)

QUIC(Quick UDP Internet Connections)和 RTMP(Real Time Messaging Protocol)是两种不同的网络传输协议,它们在一些方面有不同的特点和应用场景。 QUIC 协议 特点 基于 UDP:QUIC 建立在 UDP 之上&#xff…

Bayes-CNN-LSTM|基于贝叶斯优化的卷积-长短期神经网络多输入数据回归预测

目录 一、程序及算法内容介绍: 基本内容: 亮点与优势: 二、实际运行效果: 三、方法原理介绍: 四、完整程序下载: 一、程序及算法内容介绍: 基本内容: 本代码基于Matlab平台编…

spark:数据的关联与合并、缓存和checkpoint

文章目录 1. 数据的关联与合并1.1 join关联1.1.1 内关联1.1.2 左关联1.1.3 右关联 1.2 Union合并 2. 缓存和checkpoint 1. 数据的关联与合并 1.1 join关联 students表数据: 1.1.1 内关联 内关联只返回两个 DataFrame 中在连接键上匹配的行。 # join 关联 from…

Microsoft Visual Studio当程序中用了try catch ,如何定位到出错的地方。

在Microsoft Visual Studio中,当用了try catch的时候,程序报错一般会抛出异常到前端,无法捕捉到源代码的地方。这时候只要设置调试就行。

java基本语法(二)

continue,break,return有什么区别 在循环结构中,当循环条件不满足或者循环次数达到要求时,循环会正常结束。但是,有时候可能需要在循环的过程中,当发生了某种条件之后 ,提前终止循环&#xff0…

安科瑞/ACREL能源管理软件能耗管理软件

综合智慧能源管理系统的参与方很多,包括电网、能源服务商、大中小微用能企业甚至个人等,这是一个需要多方参与的系统,系统要有很好的兼容性和易用性。首先,系统的设计需要支持多种工业接口的应用,如第三方系统接口、智能感知设备接口以及用能…

【从零开始的LeetCode-算法】3195. 包含所有 1 的最小矩形面积 I

给你一个二维 二进制 数组 grid。请你找出一个边在水平方向和竖直方向上、面积 最小 的矩形,并且满足 grid 中所有的 1 都在矩形的内部。 返回这个矩形可能的 最小 面积。 示例 1: 输入: grid [[0,1,0],[1,0,1]] 输出: 6 解释&…

Xshell使用密钥远程登录Ubuntu 22.04报错:所选的用户密钥未在远程主机上注册。请再试一次

报错截图如下: 问题原因: Ubuntu 22.04 不支持 Xshell使用的私钥。 查看系统支持的私钥:sudo sshd -T | egrep "pubkey" ~$ sudo sshd -T | egrep "pubkey" pubkeyauthentication yes pubkeyacceptedalgorithms ssh-ed…

一字线激光模组在道路检测方面的应用

在现代道路检测领域,一字线激光模组作为一项先进的检测技术,正发挥着越来越重要的作用。这一技术以其独特的优势,为道路检测提供了更为精准、高效的解决方案。接下来我们就一起了解一下关于一字线激光模组在道路检测方面的应用。 一字线激光模…

号码品牌认证是什么?为什么我的号码总被错误标记?

电话营销,听起来十分简单,但想要让客户接听并听完您的介绍,可没那么容易。今天,我就来分享几个让客户“不拒绝”的小技巧。 首先,您可以选择使用号码品牌认证服务,在您拨打电话时,它就像给您的电…

Zico 2 靶机 - 详细流程

✨ 准备工作 靶机 && kali 环境要求 机器名网络配置靶机Zico 2NAT 模式攻击机kaliNAT 模式 靶机下载链接:zico2: 1 ~ VulnHub 打开 VMware,将 zico2.ova 拖拽到 VMware 中 设置 虚拟机名称(A) - 存储路径(P)- 导入 若是,…

FreeRTOS - 单片机程序设计模式

在学习FreeRTOS过程中,结合韦东山-FreeRTOS手册和视频、野火-FreeRTOS内核实现与应用开发、及网上查找的其他资源,整理了该篇文章。如有内容理解不正确之处,欢迎大家指出,共同进步。 单片机程序设计模式(第2章&#xf…

10月17日

输入一个数组,循环输出数组的元素,以及各个元素的长度 arr("apple" "banana" "date")# 初始化索引 index0# 获取数组长度 arr_len${#arr[]}# 使用 while 循环遍历数组 while [ $index -lt $arr_len ]; doelement${arr[$in…

“人工智能+中职”:VR虚拟仿真实训室的发展前景

随着人工智能技术的飞速发展,中职教育也迎来了新的发展机遇。特别是虚拟现实(VR)技术在中职教育领域的应用,结合人工智能的加持,为中职教育提供了全新的教学模式和实训体验。其中,VR虚拟仿真实训室的发展前…

不使用U盘重装windows系统

优点:可以不使用U盘,重装速度快,可以保留系统的激活状态! 然后自己设置就可以重装系统了~~~

【重学 MySQL】七十、揭秘数据库对象,打造高效数据管理之旅

【重学 MySQL】七十、揭秘数据库对象,打造高效数据管理之旅 数据库(Database)数据表(Table)视图(View)存储过程(Stored Procedure)触发器(Trigger&#xff09…

初识git · 有关模型

目录 前言: 有关开发模型 前言: 其实文章更新到这里的时候,我们已经学习了可以满足我们日常生活中的基本需求的指令了,但是为什么要更新本篇文章呢?是因为实际生活中我们对于开发工作,运维工作&#xff…

每日OJ题_牛客_非对称之美_最长非回文字符串_C++_Java

目录 牛客_非对称之美_最长非回文字符串 题目解析 C代码 Java代码 牛客_非对称之美_最长非回文字符串 非对称之美 (nowcoder.com) 题目解析 找到规律就是最长非回文字符串(判断是否全同->0,否则是n-1(回文减去1)或n&…