当前位置: 首页 > news >正文

Python星球日记 - 第18天:小游戏开发(猜数字游戏)

🌟引言

上一篇:Python星球日记 - 第17天:数据可视化

名人说:路漫漫其修远兮,吾将上下而求索。(屈原《离骚》)
创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊)

目录

    • 一、游戏概述与原理
      • 1. 游戏基本规则
      • 2. 编程知识点
      • 3.猜数字游戏流程图
    • 二、游戏逻辑设计
      • 1. 核心功能模块
      • 2. 程序结构设计
      • 3. 数据流设计
    • 三、使用`random`模块生成随机数
      • 1. random模块简介
      • 2. 在猜数字游戏中应用random
      • 3. 随机数的可控性
    • 四、用户交互与反馈
      • 1. 获取用户输入
      • 2. 提供反馈信息
      • 3. 游戏流程控制
    • 五、完整游戏代码
    • 六、练习:增加难度选项
      • 1. 添加限时模式
      • 2. 实现智能提示
      • 3. 添加游戏模式选择
      • 4.增加完难度后的代码
    • 七、总结与进阶方向
      • 1. 学习要点回顾
      • 2. 进阶方向建议
      • 3. 实际应用场景

专栏介绍: Python星球日记专栏介绍(持续更新ing)
更多Python知识,请关注我、订阅专栏《 Python星球日记》,内容持续更新中…

欢迎来到Python星球🪐的第18天!

在探索了Python的基础知识和应用领域后,今天让我们进入游戏开发的世界,通过一个简单但经典的猜数字游戏来体验Python编程的乐趣。这个项目将综合应用我们之前学过的多个概念,包括条件语句循环函数模块导入等。

一、游戏概述与原理

猜数字游戏是一个简单而有趣的互动游戏,它体现了编程逻辑用户交互的基本原理。这个游戏不仅能帮助我们巩固Python基础知识,还能带来编程的成就感。

在这里插入图片描述

1. 游戏基本规则

  • 计算机随机生成一个指定范围内的整数(默认为1-100)
  • 玩家输入自己猜测的数字
  • 计算机根据玩家的猜测给出"太大"、"太小"或"猜对了"的反馈
  • 玩家根据反馈继续猜测,直到猜对为止
  • 游戏结束时显示玩家猜测的次数

2. 编程知识点

这个游戏项目将涉及以下Python核心知识点

`random`模块的使用
条件判断与循环结构
用户输入与数据类型转换
函数定义与调用
简单的错误处理

3.猜数字游戏流程图

在这里插入图片描述

二、游戏逻辑设计

良好的游戏逻辑设计是开发任何游戏的基础。下面我们来分析猜数字游戏的核心逻辑组件。

1. 核心功能模块

猜数字游戏可以分解为以下几个关键功能模块:

  • 随机数生成器:生成目标数字
  • 用户输入处理器:获取并验证玩家输入
  • 比较判断器:比较玩家猜测与目标数字
  • 反馈生成器:根据比较结果生成反馈信息
  • 游戏状态管理器:追踪游戏状态(如猜测次数、是否继续)

2. 程序结构设计

根据游戏的复杂度,我们可以采用简单的顺序设计或更结构化的函数式设计。对于这个简单的猜数字游戏,我们将采用函数式设计,以提高代码的可读性和可维护性。

# 游戏的主要结构
def guess_number_game():# 游戏初始化# 主游戏循环while True:# 获取用户输入# 处理输入并提供反馈# 检查游戏是否结束# 游戏结束处理

3. 数据流设计

数据在游戏中的流动路径如下:

  1. 生成随机数 → 存储为目标值
  2. 用户输入 → 转换为整数 → 与目标值比较
  3. 比较结果 → 生成反馈信息 → 显示给用户
  4. 游戏状态更新 → 影响下一轮循环

在这里插入图片描述

三、使用random模块生成随机数

Python的random模块提供了多种生成随机数的函数,是游戏开发中的重要工具。

1. random模块简介

random模块是Python标准库的一部分,无需额外安装即可使用。它提供了各种生成随机数的功能:

import random  # 导入random模块# 生成0到1之间的随机浮点数
random_float = random.random()  # 生成指定范围内的随机整数
random_int = random.randint(1, 100)  # 生成1到100之间的随机整数# 从序列中随机选择元素
random_choice = random.choice(['石头', '剪刀', '布'])

2. 在猜数字游戏中应用random

对于我们的猜数字游戏,主要使用random.randint()函数生成指定范围内的随机整数

在这里插入图片描述

import random# 生成游戏的目标数字
def generate_target_number(min_num=1, max_num=100):"""生成指定范围内的随机整数作为目标数字"""return random.randint(min_num, max_num)# 使用示例
target = generate_target_number()  # 默认生成1-100之间的数字
print(f"生成的目标数字是: {target}")  # 仅用于测试,实际游戏中不会显示

3. 随机数的可控性

为了增加游戏的可玩性,我们可以让玩家选择数字范围,调整游戏难度

def set_game_difficulty():"""设置游戏难度,返回对应的数字范围"""print("请选择游戏难度:")print("1. 简单 (1-50)")print("2. 中等 (1-100)")print("3. 困难 (1-200)")while True:choice = input("请输入难度选项 (1/2/3): ")if choice == '1':return 1, 50elif choice == '2':return 1, 100elif choice == '3':return 1, 200else:print("无效选择,请重新输入!")

在这里插入图片描述

四、用户交互与反馈

良好的用户交互体验是游戏成功的关键因素之一。

1. 获取用户输入

获取并验证用户输入是交互式程序的基础:

def get_user_guess(min_num, max_num):"""获取并验证用户的猜测"""while True:try:guess = int(input(f"请猜一个{min_num}{max_num}之间的整数: "))if min_num <= guess <= max_num:return guesselse:print(f"请输入{min_num}{max_num}之间的整数!")except ValueError:print("输入无效,请输入一个整数!")

2. 提供反馈信息

根据用户的猜测提供清晰的反馈,帮助用户调整策略:

在这里插入图片描述

def provide_feedback(guess, target):"""根据猜测结果提供反馈"""if guess < target:print("猜小了!试试更大的数字。")return Falseelif guess > target:print("猜大了!试试更小的数字。")return Falseelse:print("恭喜你,猜对了!")return True

3. 游戏流程控制

控制游戏的整体流程,包括初始化、主循环和结束处理:

def play_round(min_num, max_num):"""进行一轮猜数字游戏"""target = generate_target_number(min_num, max_num)attempts = 0guessed_correctly = Falseprint(f"\n我已经想好了一个{min_num}{max_num}之间的数字。")while not guessed_correctly:guess = get_user_guess(min_num, max_num)attempts += 1guessed_correctly = provide_feedback(guess, target)print(f"你用了{attempts}次猜对了数字{target}!")return attempts

五、完整游戏代码

将上述所有组件整合在一起,我们得到了一个完整的猜数字游戏:

在这里插入图片描述

完整代码:

import randomdef generate_target_number(min_num=1, max_num=100):"""生成指定范围内的随机整数作为目标数字"""return random.randint(min_num, max_num)def get_user_guess(min_num, max_num):"""获取并验证用户的猜测"""while True:try:guess = int(input(f"请猜一个{min_num}{max_num}之间的整数: "))if min_num <= guess <= max_num:return guesselse:print(f"请输入{min_num}{max_num}之间的整数!")except ValueError:print("输入无效,请输入一个整数!")def provide_feedback(guess, target):"""根据猜测结果提供反馈"""if guess < target:print("猜小了!试试更大的数字。")return Falseelif guess > target:print("猜大了!试试更小的数字。")return Falseelse:print("恭喜你,猜对了!")return Truedef set_game_difficulty():"""设置游戏难度,返回对应的数字范围"""print("请选择游戏难度:")print("1. 简单 (1-50)")print("2. 中等 (1-100)")print("3. 困难 (1-200)")while True:choice = input("请输入难度选项 (1/2/3): ")if choice == '1':return 1, 50elif choice == '2':return 1, 100elif choice == '3':return 1, 200else:print("无效选择,请重新输入!")def play_round(min_num, max_num):"""进行一轮猜数字游戏"""target = generate_target_number(min_num, max_num)attempts = 0guessed_correctly = Falseprint(f"\n我已经想好了一个{min_num}{max_num}之间的数字。")while not guessed_correctly:guess = get_user_guess(min_num, max_num)attempts += 1guessed_correctly = provide_feedback(guess, target)print(f"你用了{attempts}次猜对了数字{target}!")return attemptsdef main():"""游戏主函数"""print("=== 欢迎来到猜数字游戏 ===")play_again = Truebest_score = float('inf')while play_again:min_num, max_num = set_game_difficulty()attempts = play_round(min_num, max_num)# 更新最佳成绩if attempts < best_score:best_score = attemptsprint(f"新纪录!你的最佳成绩是: {best_score}次")# 询问是否继续游戏while True:choice = input("\n是否再玩一轮?(y/n): ").lower()if choice in ['y', 'n']:play_again = (choice == 'y')breakprint("无效输入,请输入 y 或 n.")print(f"\n游戏结束!你的最佳成绩是: {best_score}次")print("感谢你的参与!")if __name__ == "__main__":main()

运行效果(以中等难度为例):

在这里插入图片描述

六、练习:增加难度选项

现在让我们通过增加更多功能,拓展游戏的可玩性。

1. 添加限时模式

增加一个计时功能,给玩家施加时间压力:

import timedef play_timed_round(min_num, max_num, time_limit=60):"""限时猜数字模式"""target = generate_target_number(min_num, max_num)attempts = 0guessed_correctly = Falseprint(f"\n我已经想好了一个{min_num}{max_num}之间的数字。")print(f"你有{time_limit}秒的时间来猜出这个数字。")start_time = time.time()while not guessed_correctly:# 检查剩余时间elapsed_time = time.time() - start_timeremaining_time = time_limit - elapsed_timeif remaining_time <= 0:print("时间到!游戏结束。")print(f"正确答案是: {target}")return float('inf')  # 返回无穷大表示失败print(f"剩余时间: {remaining_time:.1f}秒")guess = get_user_guess(min_num, max_num)attempts += 1guessed_correctly = provide_feedback(guess, target)total_time = time.time() - start_timeprint(f"你用了{attempts}次猜对了数字{target}!")print(f"用时: {total_time:.1f}秒")return attempts

2. 实现智能提示

增加智能提示功能,帮助玩家缩小猜测范围:

def provide_enhanced_feedback(guess, target, attempts):"""提供更详细的反馈信息"""if guess < target:diff = target - guessif diff <= 5:print("猜小了,但非常接近了!")elif diff <= 20:print("猜小了!差距适中。")else:print("猜小了!差距很大。")return Falseelif guess > target:diff = guess - targetif diff <= 5:print("猜大了,但非常接近了!")elif diff <= 20:print("猜大了!差距适中。")else:print("猜大了!差距很大。")return Falseelse:print("恭喜你,猜对了!")return True

3. 添加游戏模式选择

让玩家可以选择不同的游戏模式,增加游戏的多样性:

在这里插入图片描述

def select_game_mode():"""选择游戏模式"""print("请选择游戏模式:")print("1. 标准模式 - 无限次数猜测")print("2. 限时模式 - 在规定时间内猜对")print("3. 挑战模式 - 有限次数猜测")while True:choice = input("请输入模式选项 (1/2/3): ")if choice in ['1', '2', '3']:return int(choice)else:print("无效选择,请重新输入!")

4.增加完难度后的代码

import random
import timedef generate_target_number(min_num=1, max_num=100):"""生成指定范围内的随机整数作为目标数字"""return random.randint(min_num, max_num)def get_user_guess(min_num, max_num):"""获取并验证用户的猜测"""while True:try:guess = int(input(f"请猜一个{min_num}{max_num}之间的整数: "))if min_num <= guess <= max_num:return guesselse:print(f"请输入{min_num}{max_num}之间的整数!")except ValueError:print("输入无效,请输入一个整数!")def provide_feedback(guess, target):"""根据猜测结果提供基本反馈"""if guess < target:print("猜小了!试试更大的数字。")return Falseelif guess > target:print("猜大了!试试更小的数字。")return Falseelse:print("恭喜你,猜对了!")return Truedef provide_enhanced_feedback(guess, target):"""提供更详细的反馈信息"""if guess < target:diff = target - guessif diff <= 5:print("猜小了,但非常接近了!")elif diff <= 20:print("猜小了!差距适中。")else:print("猜小了!差距很大。")return Falseelif guess > target:diff = guess - targetif diff <= 5:print("猜大了,但非常接近了!")elif diff <= 20:print("猜大了!差距适中。")else:print("猜大了!差距很大。")return Falseelse:print("恭喜你,猜对了!")return Truedef set_game_difficulty():"""设置游戏难度,返回对应的数字范围"""print("请选择游戏难度:")print("1. 简单 (1-50)")print("2. 中等 (1-100)")print("3. 困难 (1-200)")print("4. 自定义范围")while True:choice = input("请输入难度选项 (1/2/3/4): ")if choice == '1':return 1, 50elif choice == '2':return 1, 100elif choice == '3':return 1, 200elif choice == '4':# 自定义范围while True:try:min_num = int(input("请输入最小值: "))max_num = int(input("请输入最大值: "))if min_num < max_num:return min_num, max_numelse:print("最小值必须小于最大值!")except ValueError:print("请输入有效的整数!")else:print("无效选择,请重新输入!")def select_game_mode():"""选择游戏模式"""print("请选择游戏模式:")print("1. 标准模式 - 无限次数猜测")print("2. 限时模式 - 在规定时间内猜对")print("3. 挑战模式 - 有限次数猜测")while True:choice = input("请输入模式选项 (1/2/3): ")if choice in ['1', '2', '3']:return int(choice)else:print("无效选择,请重新输入!")def select_feedback_type():"""选择反馈类型"""print("请选择反馈类型:")print("1. 标准反馈 (只提示大了/小了)")print("2. 增强反馈 (提供更详细的提示)")while True:choice = input("请输入反馈选项 (1/2): ")if choice in ['1', '2']:return int(choice)else:print("无效选择,请重新输入!")def play_standard_round(min_num, max_num, feedback_type=1):"""进行一轮标准模式的猜数字游戏"""target = generate_target_number(min_num, max_num)attempts = 0guessed_correctly = Falseprint(f"\n我已经想好了一个{min_num}{max_num}之间的数字。")while not guessed_correctly:guess = get_user_guess(min_num, max_num)attempts += 1if feedback_type == 1:guessed_correctly = provide_feedback(guess, target)else:guessed_correctly = provide_enhanced_feedback(guess, target)print(f"你用了{attempts}次猜对了数字{target}!")return attemptsdef play_timed_round(min_num, max_num, time_limit=60, feedback_type=1):"""限时猜数字模式"""target = generate_target_number(min_num, max_num)attempts = 0guessed_correctly = Falseprint(f"\n我已经想好了一个{min_num}{max_num}之间的数字。")print(f"你有{time_limit}秒的时间来猜出这个数字。")start_time = time.time()while not guessed_correctly:# 检查剩余时间elapsed_time = time.time() - start_timeremaining_time = time_limit - elapsed_timeif remaining_time <= 0:print("时间到!游戏结束。")print(f"正确答案是: {target}")return float('inf')  # 返回无穷大表示失败print(f"剩余时间: {remaining_time:.1f}秒")guess = get_user_guess(min_num, max_num)attempts += 1if feedback_type == 1:guessed_correctly = provide_feedback(guess, target)else:guessed_correctly = provide_enhanced_feedback(guess, target)total_time = time.time() - start_timeprint(f"你用了{attempts}次猜对了数字{target}!")print(f"用时: {total_time:.1f}秒")return attemptsdef play_challenge_round(min_num, max_num, max_attempts=10, feedback_type=1):"""挑战模式猜数字"""target = generate_target_number(min_num, max_num)attempts = 0guessed_correctly = Falseprint(f"\n我已经想好了一个{min_num}{max_num}之间的数字。")print(f"你最多有{max_attempts}次机会来猜出这个数字。")while not guessed_correctly and attempts < max_attempts:remaining_attempts = max_attempts - attemptsprint(f"剩余猜测次数: {remaining_attempts}")guess = get_user_guess(min_num, max_num)attempts += 1if feedback_type == 1:guessed_correctly = provide_feedback(guess, target)else:guessed_correctly = provide_enhanced_feedback(guess, target)if guessed_correctly:print(f"你用了{attempts}次猜对了数字{target}!")return attemptselse:print(f"很遗憾,你已用完所有{max_attempts}次猜测机会。")print(f"正确答案是: {target}")return float('inf')  # 返回无穷大表示失败def set_time_limit():"""设置时间限制"""while True:try:time_limit = int(input("请设置时间限制(秒): "))if time_limit > 0:return time_limitelse:print("时间限制必须大于0!")except ValueError:print("请输入有效的整数!")def set_max_attempts():"""设置最大尝试次数"""while True:try:max_attempts = int(input("请设置最大尝试次数: "))if max_attempts > 0:return max_attemptselse:print("尝试次数必须大于0!")except ValueError:print("请输入有效的整数!")def main():"""游戏主函数"""print("=== 欢迎来到猜数字游戏 ===")play_again = Truebest_score = float('inf')while play_again:game_mode = select_game_mode()min_num, max_num = set_game_difficulty()feedback_type = select_feedback_type()if game_mode == 1:  # 标准模式attempts = play_standard_round(min_num, max_num, feedback_type)elif game_mode == 2:  # 限时模式time_limit = set_time_limit()attempts = play_timed_round(min_num, max_num, time_limit, feedback_type)else:  # 挑战模式max_attempts = set_max_attempts()attempts = play_challenge_round(min_num, max_num, max_attempts, feedback_type)# 更新最佳成绩(只有成功猜对才更新)if attempts < best_score and attempts != float('inf'):best_score = attemptsprint(f"新纪录!你的最佳成绩是: {best_score}次")# 询问是否继续游戏while True:choice = input("\n是否再玩一轮?(y/n): ").lower()if choice in ['y', 'n']:play_again = (choice == 'y')breakprint("无效输入,请输入 y 或 n.")if best_score != float('inf'):print(f"\n游戏结束!你的最佳成绩是: {best_score}次")else:print("\n游戏结束!你没有成功完成任何一轮游戏。")print("感谢你的参与!")if __name__ == "__main__":main()

运行效果:

在这里插入图片描述

七、总结与进阶方向

通过开发这个猜数字游戏,我们巩固了Python的基础知识,并学习了游戏开发的基本流程。

1. 学习要点回顾

在本次学习中,我们掌握了:

  • 使用random模块生成随机数
  • 实现基本的用户交互功能
  • 设计和组织游戏逻辑
  • 扩展基本功能,增加游戏可玩性

2. 进阶方向建议

如果你对游戏开发感兴趣,可以尝试以下进阶方向:

在这里插入图片描述

3. 实际应用场景

小游戏开发不仅是学习编程的好方式,还有许多实际应用场景

  • 教育领域:开发寓教于乐的教育游戏
  • 培训场景:通过游戏化学习提高参与度
  • 产品营销:创建互动营销小游戏吸引用户
  • 个人项目:丰富个人作品集,展示编程能力

通过这个简单的猜数字游戏,你已经迈出了游戏开发的第一步。希望你能继续探索Python的无限可能,创造出更多有趣的应用!

在第19天的星球之旅中,我们将会学习Web开发基础,一起来开发一个Web网页吧!

创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊)
如果你对今天的内容有任何问题,或者想分享你的学习心得,欢迎在评论区留言讨论!

相关文章:

Python星球日记 - 第18天:小游戏开发(猜数字游戏)

&#x1f31f;引言&#xff1a; 上一篇&#xff1a;Python星球日记 - 第17天&#xff1a;数据可视化 名人说&#xff1a;路漫漫其修远兮&#xff0c;吾将上下而求索。&#xff08;屈原《离骚》&#xff09; 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程…...

ShopXO v2.2.4开源商城手动部署(保姆级)+异常处理

ShopXO v2.2.4开源商城手动部署(保姆级) 1.项目了解 1.1项目简洁 ShopXO国内领先企业级免费开源电商系统&#xff01; 求实进取、创新专注、自主研发、国内领先企业级电商系统解决方案。遵循MIT开源协议发布&#xff0c;无需授权、可商用、可二次开发、满足99%的电商运营需…...

Android Studio - 解决 Please Select Android SDK

一、出现的问题 点击 Run 后弹窗&#xff0c;图一位置出现图二提示。 二、解决办法 进入 Tools -> SDK Manager&#xff0c;在 Android SDK Location 点击 Edit&#xff0c;一直 Next 就解决了。...

Java 列表初始化全解析:7种方式详解与最佳实践

文章目录 **引言****1. 传统逐个添加元素****特点****注意事项** **2. Arrays.asList() 构造函数****特点****注意事项** **3. 双括号初始化&#xff08;匿名内部类&#xff09;****特点****注意事项** **4. Java 9 List.of()&#xff08;不可变列表&#xff09;****特点****注…...

python之安装PaddlePaddle和PaddleX解析pdf表格

目录标题 飞桨PaddlePaddle本地安装教程1-1. 基于 Docker 安装飞桨1-2. 基于 pip 安装飞桨2. 我两个环境 都选择的是pip 安装10. 如果报错10. 离线安装 飞桨PaddlePaddle本地安装教程 源码下载&#xff1a;https://github.com/PaddlePaddle/PaddleX/blob/release/3.0-beta1/do…...

MLA(Multi-Level Adaptive)融合算子全院级医疗编程探析(代码版)

MLA&#xff08;Multi-Level Adaptive&#xff09;融合算子的AI医疗技术原理、实现方法及医疗应用场景的深度解析&#xff1a; 一、MLA融合算子技术本质 1. 核心设计理念 MLA是一种硬件感知的算子重组技术&#xff0c;通过打破传统深度学习框架的算子边界&#xff0c;实现&a…...

Python----概率论与统计(概率论,互斥事件和概率和,非互斥事件和概率和,独立性事件,生日问题,条件概率)

一、概率论 1.1、概率论 概率论是研究随机现象的一门数学学科。它为不确定性提供了一个量化的框架&#xff0c;允许我们衡量事件发生的可能性。 概率论研究随机现象&#xff0c;用于量化和分析不确定性。它的基本概念包括&#xff1a; 样本空间&#xff08;Sample Space&…...

Ubuntu24.04 编译 Qt 源码

一&#xff1a;Ubuntu 把 Qt 拆成了多个源码包&#xff1a; 1. 基础包 2. 可选包 二&#xff1a;编译 qtbase-opensource-src 1. 配置源&#xff08;修改 /etc/apt/sources.list.d/ubuntu.sources) 2. 下载代码 apt source qtbase-opensource-src3. 安装依赖 sudo a…...

数据库无法插入中文字符

INSERT INTO book VALUES (1, ‘楚辞’, ‘屈原’, ‘中国文联出版社’, ‘0’) 1366 - Incorrect string value: ‘\xE6\xA5\x9A\xE8\xBE\x9E’ for column ‘name’ at row 1 查询时间: 0 秒 查看字符集设置 SHOW VARIABLES LIKE character_set%; SHOW VARIABLES LIKE colla…...

在Ubuntu系统如何让MySQL服务器支持远程连接

目录 问题描述 解决方案 步骤一&#xff1a;检查MySQL配置文件 ​编辑 步骤二&#xff1a;修改bind-address参数 ​编辑 步骤三&#xff1a;重启MySQL服务 步骤四&#xff1a;验证更改 步骤五&#xff1a;检查防火墙设置 步骤六&#xff1a;测试远程连接 注意事项 …...

【期中准备】电路基础(西电)

电路 题型&#xff1a;填空&#xff0c;简答&#xff08;概念&#xff09;&#xff0c;计算 PPT 1.X 电压和电流的参考方向一致&#xff0c;称为关联参考方向 消耗功率为正数&#xff1a;负载和电源由功率正负来定义 电路中所有原件功率之和为0&#xff08;“自产自销”&#…...

mysql 重复读自己事务中可以看到新插入数据

推荐好文 吃透MySQL&#xff08;六&#xff09;&#xff1a;事务详细介绍 地址转发https://blog.csdn.net/u013277209/article/details/113585022 开启客户端 mysql -u 账号名 -p 输入密码 在一个 事务中 mysql> set session transaction isolation level repeatable…...

Java后端开发-面试总结(集结版)

第一个问题&#xff0c;在 Java 集合框架中&#xff0c;ArrayList和LinkedList有什么区别&#xff1f;在实际应用场景中&#xff0c;应该如何选择使用它们&#xff1f; ArrayList 基于数组&#xff0c;LinkedList 基于双向链表。 在查询方面 ArrayList 效率高&#xff0c;添加…...

Python第八章03:Pyecharts快速入门

# pyecharts快速入门# 一、折线图基础应用# 导入python包 from pyecharts.charts import Line from pyecharts.options import TitleOpts,LegendOpts,ToolboxOpts,VisualMapOpts,TooltipOpts,DataZoomOpts# 创建一个折线图对象 line Line() # 给折线图对象添加x、y轴的数据 l…...

BUUCTF-web刷题篇(17)

26.BabyUpload 源码&#xff1a;https://github.com/imaginiso/GXY_CTF/tree/master/Web/babyupload 查看题目源码&#xff1a; 写着&#xff1a;SetHandler application/x-httpd-php 通过源码可以看出这道文件上传题目主要还是考察.htaccess配置文件的特性&#xff0c;倘若…...

openfga原理及简单落地方案设计

源码地址 https://github.com/openfga OpenFGA 是一款高性能且灵活的授权/许可引擎,专为开发人员打造,灵感来自Google Zanzibar。它将强大的基于关系的访问控制 (ReBAC)和基于属性的访问控制 (ABAC)概念与领域特定语言相结合,可以轻松制定可以扩展和发展到任何规模的任何用例…...

混合并行技术在医疗AI领域的应用分析(代码版)

混合并行技术(专家并行/张量并行/数据并行)通过多维度的计算资源分配策略,显著提升了医疗AI大模型的训练效率与推理性能。以下结合技术原理与医疗场景实践,从策略分解、技术对比、编排优化及典型案例等维度展开分析: 一、混合并行技术:突破单卡算力限制 1. 并行策略三维分…...

深信服安全运营面试题

《网安面试指南》https://mp.weixin.qq.com/s/RIVYDmxI9g_TgGrpbdDKtA?token1860256701&langzh_CN 5000篇网安资料库https://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247486065&idx2&snb30ade8200e842743339d428f414475e&chksmc0e4732df793fa3bf39…...

基于IDEA+SpringBoot+Mave+Thymeleaf的系统实现

一. 安装IntelliJ IDEA 下载并安装IntelliJ IDEA Ultimate或Community版 2024年最新版IntelliJ IDEA下载安装过程&#xff08;含Java环境搭建&#xff09; 二、下载 Maven 访问官网下载 打开浏览器&#xff0c;访问 Maven 官方下载页面&#xff1a; Download Apache Maven –…...

用Python爬虫抓取数据并保存为JSON的完整指南

本文将深入探讨如何利用Python爬虫技术抓取网页数据&#xff0c;并通过专业的数据处理流程将其保存为JSON格式。我们将以电商网站产品数据抓取为例&#xff0c;演示从基础实现到生产级优化的完整流程&#xff0c;涵盖反爬策略应对、数据清洗和大规模存储等关键环节。 一、环境…...

Tigshop| 一个基于Java的开源商城系统

在电商竞争愈发激烈的当下&#xff0c;一个强大且适配的商城系统是商家制胜的法宝 Tigshop官网 - 开源商城系统https://www.tigshop.com/ 一、卓越技术根基​ 前端体验升级​ Tigshop 运用 Vue3 与 TypeScript 搭建前端。Vue3 的响应式系统和 Composition API&#xff0c;让页…...

Windows 部署项目 apache + mod_wsgi,nginx + waitress

文章目录 1、apache mod_wsgi&#xff0c;nginx waitress两种部署方式的区别2、以nginx waitress为例 有些项目必须部署在windows上&#xff0c;有IIS wfastcgi、apache mod_wsgi&#xff0c;nginx waitress部署方式 1、apache mod_wsgi&#xff0c;nginx waitress两种…...

RabbitMQ惰性队列的工作原理、消息持久化机制、同步刷盘的概念、延迟插件的使用方法

惰性队列工作原理 惰性队列通过尽可能多地将消息存储到磁盘上来减少内存的使用。与传统队列相比&#xff0c;惰性队列不会主动将消息加载到内存中&#xff0c;而是尽量让消息停留在磁盘上&#xff0c;从而降低内存占用。尽管如此&#xff0c;它并不保证所有操作都是同步写入磁…...

Prompt_Engineering提示词工程(一)

一、Prompt&#xff08;提示词&#xff09; Prompt&#xff08;提示词&#xff09;是给AI模型交互文本片段&#xff0c;用于指导模型生成符合预期输出结果&#xff0c;提示词的目的是为模型提供一个上下文的任务&#xff0c;以便模型能够更准确地理解用户的意图&#xff0c;并…...

探索 Shell 中的扩展通配符:从 Bash 到 Zsh

在 Unix 系统中&#xff0c;通配符&#xff08;globbing&#xff09;是 shell 的核心功能&#xff0c;用于快速匹配文件或目录。基础通配符&#xff08;如 *、?、[]&#xff09;虽简单实用&#xff0c;但在复杂场景下往往力不从心。为此&#xff0c;许多现代 shell 提供了“扩…...

电脑清洁常用工具

清洁布&#xff1a;用于擦拭电脑表面和屏幕。一般选择柔软、不掉毛的微纤维清洁布&#xff0c;它能有效去除灰尘和污渍&#xff0c;同时不会刮伤电脑表面。压缩空气罐&#xff1a;可以产生强力气流&#xff0c;用于吹走电脑内部的灰尘&#xff0c;如主机箱、键盘缝隙等部位的灰…...

深入理解Spring是如何解决循环依赖的

1、简介循环依赖 在 Spring 框架中&#xff0c;循环依赖是指两个或多个 Bean 互相依赖&#xff0c;形成了一个闭环。例如&#xff0c;Bean A 依赖于 Bean B&#xff0c;而 Bean B 又依赖于 Bean A。这种依赖关系可能会导致初始化失败。Spring 提供了一种机制来解决这种循环依赖…...

AIGC时代的新风口!MCP协议引领未来无限可能

文章目录 一、引言二、MCP的定义与架构三、MCP的使用案例1. Cursor MCP Figma&#xff1a;工程化项目自动化2. Claude Desktop与本地文件系统交互3. 智能客服系统中的MCP应用 四、MCP的应用前景1. 更广泛的应用场景拓展2. 更高的性能要求和优化3. 更强的安全性和隐私保护措施…...

NO.81十六届蓝桥杯备战|数据结构-Trie树-字典树-前缀树|于是他错误的点名开始了|最大异或对 The XOR Largest Pair(C++)

字典树的概念 Trie树⼜叫字典树或前缀树&#xff0c;是⼀种能够快速插⼊和查询字符串的数据结构。它利⽤字符串的公共前缀&#xff0c;将字符串组织成⼀棵树形结构&#xff0c;从⽽⼤⼤提⾼了存储以及查找效率。 我们可以把字典树想象成⼀棵多叉树&#xff0c;每⼀条边代表⼀个…...

go语言应该如何学习

以下是学习Go语言的高效路径及关键技巧&#xff0c;结合多个优质来源整理而成&#xff0c;适合不同基础的学习者&#xff1a; 一、基础语法快速入门&#xff08;1-2周&#xff09; 1、环境搭建 下载安装Go SDK&#xff0c;配置GOPATH和GOROOT环境变量&#xff0c;推荐使用Go…...

struct结构体、union联合体和枚举

目录 一、结构体的声明和使用 1.1 结构体正常声明和创建 1.2 结构体特殊声明 1.3 结构体的自引用 二、结构体内存对齐 2.1 对齐规则 2.2 #pragma修改 三、结构体传参 四、结构体位段 4.1 位段内存分配 4.2 位段内存应用 五、结构体中的柔性数组概念 六、union联合…...

el-tree 实现树形菜单子级取消选中后父级选中效果不变

背景 在复杂的企业级管理系统中,树形菜单是一种常见的数据展示和交互组件。传统的树形菜单通常存在以下交互局限: 子节点取消选中时,父节点会自动取消选中无法满足复杂的权限分配和数据筛选场景实际应用场景: 组织架构权限管理多层级资源分配复杂的数据筛选与展示实现需求…...

centos7系统搭建nagios监控

~监控节点安装 1. 系统准备 1.1 更新系统并安装依赖 sudo yum install -y httpd php php-cli gcc glibc glibc-common gd gd-devel make net-snmp openssl-devel wget unzip sudo yum install -y epel-release # 安装 EPEL 仓库 sudo yum install -y automake autoconf lib…...

Gitlab的迁移升级

Gitlab11.6.5的迁移升级 Gitlab升级是不能跨大版本升级的&#xff0c;根据官方升级路径来操作。 gitlab迁移 首先需要查看当前gitlab版本 cat /opt/gitlab/embedded/service/gitlab-rails/VERSION 当前版本是11.6.5 备份源数据 原仓库备份所有的文件 /opt/gitlab/bin/git…...

C++11QT复习 (十九)

文章目录 Day13 C 时间库和线程库学习笔记&#xff08;Chrono 与 Thread&#xff09;一、时间库 <chrono>1.1 基本概念1.2 使用示例1.3 duration 字面量单位 二、线程库 <thread>2.1 基本用法2.2 数据竞争&#xff08;Race Condition&#xff09;2.3 加锁&#xff…...

3 版本控制:GitLab、Jenkins 工作流及分支开发模式实践

一、引言 在软件开发过程中,版本控制是保障代码质量、提高开发效率的关键环节。有效的版本控制能够帮助团队成员更好地协作,追踪代码变更,快速定位和解决问题。GitLab 和 Jenkins 作为两款广泛使用的工具,在版本控制和持续集成 / 持续部署(CI/CD)流程中发挥着重要作用。本…...

docker配置远程连接,dockerfile-maven-plugin插件打包到远程

我开发机器上的内存不大&#xff0c;能不安装在本地的应用就都跑在服务器上了&#xff0c;但是本地打包时需要用到docker打包成镜像&#xff0c;这时会本地运行docker&#xff0c;所以准备本地只使用docker客户端&#xff0c;连接服务器上的docker服务端 服务端配置 docker服…...

Skyline配置指南-微信小程序

Skyline 是微信小程序推出的新一代渲染引擎&#xff0c;提供了更强大的渲染能力和更流畅的性能体验。以下是配置 Skyline 的详细步骤&#xff1a; 一、app.json文件配置 "componentFramework": "glass-easel", "lazyCodeLoading": "requi…...

【c语言】倒置字符串

将一句话的单词进行倒置&#xff0c;符号不变&#xff0c;用例长度不超过100 思路&#xff1a; 逆序整个字符串逆序每个单词 #include <stdio.h> #include <string.h> void reverse(char* left, char* right) {while (left < right) {//char *tmp left;//error…...

MySQL多表查询实战指南:从SQL到XML映射的完整实现(2W+字深度解析)

MySQL多表查询实战指南:从SQL到XML映射的完整实现(2W+字深度解析) 第一章 多表查询基础与核心原理 1.1 关系型数据库设计范式 以电商系统为例的三范式实践: -- 原始数据表(违反第三范式) CREATE TABLE orders (order_id INT PRIMARY KEY,customer_name VARCHAR(50),p…...

【图书管理系统】全栈开发图书管理系统获取图书列表接口(后端:计算图书页数、查询当前页展示的书籍)

图书列表 实现服务器代码(计算图书总数量查询当前页需要展示的书籍) 后端响应时&#xff0c;需要响应给前端的数据 records&#xff1a;第 pageNum 页要展示的图书有哪些&#xff08;存储到List集合中&#xff09;total&#xff1a;计算一共有多少本书&#xff08;用于告诉前…...

SpringMvc的请求-获得请求参数

客户端请求参数的格式是: namevalue&namevalue..… 服务器端要获得请求的参数&#xff0c;有时还需要进行数据的封装&#xff0c;SpringMVC可以接收如下类型的参数: 基本类型参数 POJO类型参数 数组类型参数 集合类型参数 获得基本类型参数 Controller中的业务方法…...

CSS 笔记——Flexbox(弹性盒布局)

目录 1. Flex 容器与 Flex 项目 2. 主轴与交叉轴 3. Flex 容器的属性 display flex-direction justify-content align-items align-content flex-wrap 4. Flex 项目的属性 flex-grow flex-shrink flex-basis flex align-self 5. Flexbox 的优点 6. Flexbox 的…...

Redis 缓存 + MySql 持久化 实现点赞服务

前言 为什么所用 redis 作为缓存来实现点赞服务, 而不是直接就使用 mysql 来完成? 使用 Redis 的集合数据结构来存储点赞用户的 ID&#xff0c;方便快速判断用户是否已点赞; 当用户频繁的点赞和取消点赞时, 无需操作数据库, 减轻服务器压力 Redis 可以承受高并发的读写操作…...

Oracle OCP知识点详解2:yum 等服务的搭建

一、YUM/DNF 服务架构解析 1.1 核心组件交互流程 sequenceDiagram participant Client participant YUM participant Repository participant RPMDBClient->>YUM: yum install oracle-database-preinstall YUM->>Repository: 获取元数据(repodata) Repository--&…...

JavaScript Hook XMLHttpRequest操作:逆向与调试实战指南

在JavaScript逆向工程中&#xff0c;Hook XMLHttpRequest操作是一种重要的技术&#xff0c;可以用来捕获、修改或分析网络请求的发送和接收过程。本文将结合具体案例&#xff0c;详细讲解如何实现XMLHttpRequest的Hook操作。 一、Hook XMLHttpRequest的基本原理 &#xff08;…...

21 天 Python 计划:MySQL视图、触发器、存储过程、函数与流程控制

文章目录 一、视图1.1 创建视图1.2 使用视图1.3 修改视图1.4 删除视图 二、触发器2.1 创建触发器2.2 使用触发器2.3 删除触发器 三、存储过程3.1 介绍3.2 创建简单存储过程&#xff08;无参&#xff09;3.3 创建存储过程&#xff08;有参&#xff09;3.4 执行存储过程3.5 删除存…...

机器学习 Day10 逻辑回归

1.简介 流程就是&#xff1a; 就是我们希望回归后激活函数给出的概率越是1和0. 2.API介绍 sklearn.linear_model.LogisticRegression 是 scikit-learn 库中用于实现逻辑回归算法的类&#xff0c;主要用于二分类或多分类问题。以下是对其重要参数的详细介绍&#xff1a; 2.1.…...

Hadoop的序列化和反序列化

//1 package com.example.sei;import org.apache.hadoop.io.Writable;import java.io.DataInput; import java.io.DataOutput; import java.io.IOException;//学生类&#xff0c;姓名&#xff0c;年龄 //支持hadoop的序列化 //1.要实现Writable接口 //2.补充一个空参构造 publi…...

Altera Cyclone EP1C20F400C8N FPGA 阿尔特拉 介绍

在可编程逻辑器件领域&#xff0c;Altera 的 Cyclone 系列 FPGA 以其低成本、低功耗和灵活的 I/O 支持而著称。EP1C20F400C8N 作为 Cyclone I 家族中规模最大的成员之一&#xff0c;提供约 20 060 个逻辑单元&#xff0c;面向通信、工业控制、视频处理等多种嵌入式应用场景。​…...