【Dison夏令营 Day 13】使用 Python 创建扫雷游戏

在本文中,我们将介绍如何使用 Python 语言创建自己的基于终端的扫雷程序。

关于游戏
1992年4月6日,扫雷和纸牌、空当接龙等小游戏搭载在Windows 3.1系统中与用户见面,主要目的是让用户训练使用鼠标。扫雷是一款单人游戏,这个游戏的玩法很简单,有初级、中级、高级和自定义等模式,雷区中随机布置一定数量的地雷,玩家需要清除一个包含地雷和数字的正方形网格。玩家需要借助相邻方格中的数字来防止自己落在地雷上,但不许踩到地雷。

在这里插入图片描述

使用 Python 设计扫雷游戏

在创建游戏逻辑之前,我们需要设计游戏的基本布局。使用 Python 创建正方形网格非常容易:

# Printing the Minesweeper Layout
def print_mines_layout():global mine_valuesglobal nprint()print("\t\t\tMINESWEEPER\n")st = "   "for i in range(n):st = st + "     " + str(i + 1)print(st)   for r in range(n):st = "     "if r == 0:for col in range(n):st = st + "______" print(st)st = "     "for col in range(n):st = st + "|     "print(st + "|")st = "  " + str(r + 1) + "  "for col in range(n):st = st + "|  " + str(mine_values[r][col]) + "  "print(st + "|") st = "     "for col in range(n):st = st + "|_____"print(st + '|')print()

每次迭代显示的网格如下图所示:

在这里插入图片描述
M "符号表示该单元格中存在 “地雷”。我们可以清楚地看到,网格上的任何数字都表示相邻 "8 "单元格中存在的地雷数量。

本教程将进一步解释如何使用 mine_values 等变量。

输入系统

任何游戏最重要的部分之一就是输入法。在我们的扫雷版本中,我们将使用行数和列数作为输入技术。

在开始游戏之前,脚本必须为玩家提供一组指令。我们的游戏会打印以下内容。

在这里插入图片描述
与网格一起显示的行数和列数对我们的输入系统很有帮助。我们知道,在没有任何指示器的情况下追踪地雷是很困难的。因此,扫雷游戏提供了一种使用 "标志 "来标记我们已知含有地雷的单元格的方法。

数据存储

对于一局扫雷游戏,我们需要记录以下信息:

  • 网格大小
  • 地雷数量
  • 实际 "网格值——在游戏开始时,我们需要一个容器来存储玩家未知的游戏实际值。例如,地雷的位置。
  • 表面 "网格值 - 每次移动后,我们都需要更新所有必须显示给玩家的值。
  • 标记位置 - 已标记的单元格。

这些值通过以下数据结构存储

if __name__ == "__main__":# Size of gridn = 8# Number of minesmines_no = 8# The actual values of the gridnumbers = [[0 for y in range(n)] for x in range(n)] # The apparent values of the gridmine_values = [[' ' for y in range(n)] for x in range(n)]# The positions that have been flaggedflags = []

扫雷的游戏逻辑并不复杂。所有的努力都是为了设置扫雷布局。

设置地雷

我们需要随机设置地雷的位置,这样玩家就无法预测它们的位置。这可以通过以下方法实现

# Function for setting up Mines
def set_mines():global numbersglobal mines_noglobal n# Track of number of mines already set upcount = 0while count < mines_no:# Random number from all possible grid positions val = random.randint(0, n*n-1)# Generating row and column from the numberr = val // ncol = val % n# Place the mine, if it doesn't already have oneif numbers[r][col] != -1:count = count + 1numbers[r][col] = -1

在代码中,我们从网格中所有可能的单元格中随机选择一个数字。我们一直这样做,直到得到所述的地雷数量。

注意:地雷的实际值存储为-1,而为显示而存储的值则表示地雷为 “M”。

注意:"randint "函数只能在导入随机库后使用。在程序开始时写入 "import random "即可。

设置网格编号

对于网格中的每个单元格,我们必须检查所有相邻单元格是否存在地雷。具体方法如下

# Function for setting up the other grid values
def set_values():global numbersglobal n# Loop for counting each cell valuefor r in range(n):for col in range(n):# Skip, if it contains a mineif numbers[r][col] == -1:continue# Check up  if r > 0 and numbers[r-1][col] == -1:numbers[r][col] = numbers[r][col] + 1# Check down    if r < n-1  and numbers[r+1][col] == -1:numbers[r][col] = numbers[r][col] + 1# Check leftif col > 0 and numbers[r][col-1] == -1:numbers[r][c] = numbers[r][c] + 1# Check rightif col < n-1 and numbers[r][col+1] == -1:numbers[r][col] = numbers[r][col] + 1# Check top-left    if r > 0 and col > 0 and numbers[r-1][col-1] == -1:numbers[r][col] = numbers[r][col] + 1# Check top-rightif r > 0 and col < n-1 and numbers[r-1][col+1]== -1:numbers[r][col] = numbers[r][col] + 1# Check below-left  if r < n-1 and col > 0 and numbers[r+1][col-1]== -1:numbers[r][col] = numbers[r][col] + 1# Check below-rightif r < n-1 and col< n-1 and numbers[r+1][col+1]==-1:numbers[r][col] = numbers[r][col] + 1

这些值是不对玩家公开的,因此被存储在数字变量中。

游戏循环

游戏循环是游戏中非常关键的一部分。它需要更新玩家的每一步棋以及游戏的结局。

# Set the mines
set_mines()# Set the values
set_values()# Display the instructions
instructions()# Variable for maintaining Game Loop
over = False# The GAME LOOP 
while not over:print_mines_layout()

在循环的每次迭代中,都必须显示扫雷网格并处理玩家的移动。

处理玩家输入

正如我们之前提到的,有两种玩家输入:

# Input from the user
inp = input("Enter row number followed by space and column number = ").split()

标准输入

在普通移动中,会提到行和列的编号。玩家此举的动机是解锁一个没有地雷的单元格。

# Standard Move
if len(inp) == 2:# Try block to handle errant inputtry: val = list(map(int, inp))except ValueError:clear()print("Wrong input!")instructions()continue

旗子输入

在插旗动作中,游戏者会输入三个数值。前两个值表示小区位置,最后一个值表示插旗。

# Flag Input
elif len(inp) == 3:if inp[2] != 'F' and inp[2] != 'f':clear()print("Wrong Input!")instructions()continue# Try block to handle errant input  try:val = list(map(int, inp[:2]))except ValueError:clear()print("Wrong input!")instructions()continue

净化输入

在存储输入后,我们必须进行一些合理性检查,以便游戏顺利运行。

# Sanity checks
if val[0] > n or val[0] < 1 or val[1] > n or val[1] < 1:clear()print("Wrong Input!")instructions()continue# Get row and column numbers
r = val[0]-1
col = val[1]-1

输入过程完成后,行号和列号将被提取并存储在 "r "和 "c "中。

处理标志输入

管理标记输入并不是一个大问题。在标记单元格为地雷之前,需要检查一些先决条件。

必须进行以下检查:

  • 单元格是否已被标记。
  • 要标记的单元是否已经显示给玩家。
  • 标记数量不超过地雷数量。

处理完这些问题后,该单元就会被标记为地雷。

# If cell already been flagged
if [r, col] in flags:clear()print("Flag already set")continue# If cell already been displayed
if mine_values[r][col] != ' ':clear()print("Value already known")continue# Check the number for flags    
if len(flags) < mines_no:clear()print("Flag set")# Adding flag to the listflags.append([r, col])# Set the flag for displaymine_values[r][col] = 'F'continue
else:clear()print("Flags finished")continue    

处理标准输入

标准输入涉及游戏的整体运行。有三种不同的情况:

锚定地雷

一旦玩家选择了有地雷的单元格,游戏就结束了。这可能是运气不好或判断失误造成的。

# If landing on a mine --- GAME OVER    
if numbers[r][col] == -1:mine_values[r][col] = 'M'show_mines()print_mines_layout()print("Landed on a mine. GAME OVER!!!!!")over = Truecontinue

当我们降落到有地雷的单元格后,我们需要显示游戏中的所有地雷,并改变游戏循环后面的变量。

函数 "show_mines() "负责执行此操作。

def show_mines():global mine_valuesglobal numbersglobal nfor r in range(n):for col in range(n):if numbers[r][col] == -1:mine_values[r][col] = 'M'

访问 "0 "值单元格。
创建游戏最棘手的部分就是管理这种情况。每当游戏者访问一个 "0 "值单元格时,所有相邻的元素都必须显示出来,直到访问到一个非零值单元格为止。

# If landing on a cell with 0 mines in neighboring cells
elif numbers[r][n] == 0:vis = []mine_values[r][n] = '0'neighbours(r, col)  

这一目标可以通过递归来实现。递归是一种编程工具,其中的函数会调用自身,直到基本情况得到满足。相邻函数就是一个递归函数,它解决了我们的问题。

def neighbours(r, col):global mine_valuesglobal numbersglobal vis# If the cell already not visitedif [r,col] not in vis:# Mark the cell visitedvis.append([r,col])# If the cell is zero-valuedif numbers[r][col] == 0:# Display it to the usermine_values[r][col] = numbers[r][col]# Recursive calls for the neighbouring cellsif r > 0:neighbours(r-1, col)if r < n-1:neighbours(r+1, col)if col > 0:neighbours(r, col-1)if col < n-1:neighbours(r, col+1)    if r > 0 and col > 0:neighbours(r-1, col-1)if r > 0 and col < n-1:neighbours(r-1, col+1)if r < n-1 and col > 0:neighbours(r+1, col-1)if r < n-1 and col < n-1:neighbours(r+1, col+1)  # If the cell is not zero-valued            if numbers[r][col] != 0:mine_values[r][col] = numbers[r][col]

针对游戏的这一特殊概念,我们使用了一种新的数据结构,即 vis。vis 的作用是在递归过程中跟踪已访问过的单元格。如果没有这些信息,递归将永远持续下去。

在显示所有零值单元格及其相邻单元格后,我们就可以进入最后一个场景了。

选择非零值单元格

处理这种情况无需费力,因为我们只需更改显示值即可。

# If selecting a cell with atleast 1 mine in neighboring cells  
else:   mine_values[r][col] = numbers[r][col]

结束游戏

每次下棋时,都需要检查棋局是否结束。具体做法如下

# Check for game completion 
if(check_over()):show_mines()print_mines_layout()print("Congratulations!!! YOU WIN")over = Truecontinue

函数 check_over()负责检查游戏是否结束。

# Function to check for completion of the game
def check_over():global mine_valuesglobal nglobal mines_no# Count of all numbered valuescount = 0# Loop for checking each cell in the gridfor r in range(n):for col in range(n):# If cell not empty or flaggedif mine_values[r][col] != ' ' and mine_values[r][col] != 'F':count = count + 1# Count comparison          if count == n * n - mines_no:return Trueelse:return False

我们计算没有空格或标记的单元格数量。当这一数字等于除含有地雷的单元格外的所有单元格时,游戏即宣告结束。

每次移动后清除输出

当我们不断在终端上打印内容时,终端就会变得很拥挤。因此,必须不断清除输出。方法如下

# Function for clearing the terminal
def clear():os.system("clear")

完整代码

以下是扫雷游戏的完整代码:

# Importing packages
import random
import os# Printing the Minesweeper Layout
def print_mines_layout():global mine_valuesglobal nprint()print("\t\t\tMINESWEEPER\n")st = "   "for i in range(n):st = st + "     " + str(i + 1)print(st)   for r in range(n):st = "     "if r == 0:for col in range(n):st = st + "______" print(st)st = "     "for col in range(n):st = st + "|     "print(st + "|")st = "  " + str(r + 1) + "  "for col in range(n):st = st + "|  " + str(mine_values[r][col]) + "  "print(st + "|") st = "     "for col in range(n):st = st + "|_____"print(st + '|')print()# Function for setting up Mines
def set_mines():global numbersglobal mines_noglobal n# Track of number of mines already set upcount = 0while count < mines_no:# Random number from all possible grid positions val = random.randint(0, n*n-1)# Generating row and column from the numberr = val // ncol = val % n# Place the mine, if it doesn't already have oneif numbers[r][col] != -1:count = count + 1numbers[r][col] = -1# Function for setting up the other grid values
def set_values():global numbersglobal n# Loop for counting each cell valuefor r in range(n):for col in range(n):# Skip, if it contains a mineif numbers[r][col] == -1:continue# Check up  if r > 0 and numbers[r-1][col] == -1:numbers[r][col] = numbers[r][col] + 1# Check down    if r < n-1  and numbers[r+1][col] == -1:numbers[r][col] = numbers[r][col] + 1# Check leftif col > 0 and numbers[r][col-1] == -1:numbers[r][col] = numbers[r][col] + 1# Check rightif col < n-1 and numbers[r][col+1] == -1:numbers[r][col] = numbers[r][col] + 1# Check top-left    if r > 0 and col > 0 and numbers[r-1][col-1] == -1:numbers[r][col] = numbers[r][col] + 1# Check top-rightif r > 0 and col < n-1 and numbers[r-1][col+1] == -1:numbers[r][col] = numbers[r][col] + 1# Check below-left  if r < n-1 and col > 0 and numbers[r+1][col-1] == -1:numbers[r][col] = numbers[r][col] + 1# Check below-rightif r < n-1 and col < n-1 and numbers[r+1][col+1] == -1:numbers[r][col] = numbers[r][col] + 1# Recursive function to display all zero-valued neighbours  
def neighbours(r, col):global mine_valuesglobal numbersglobal vis# If the cell already not visitedif [r,col] not in vis:# Mark the cell visitedvis.append([r,col])# If the cell is zero-valuedif numbers[r][col] == 0:# Display it to the usermine_values[r][col] = numbers[r][col]# Recursive calls for the neighbouring cellsif r > 0:neighbours(r-1, col)if r < n-1:neighbours(r+1, col)if col > 0:neighbours(r, col-1)if col < n-1:neighbours(r, col+1)    if r > 0 and col > 0:neighbours(r-1, col-1)if r > 0 and col < n-1:neighbours(r-1, col+1)if r < n-1 and col > 0:neighbours(r+1, col-1)if r < n-1 and col < n-1:neighbours(r+1, col+1)  # If the cell is not zero-valued            if numbers[r][col] != 0:mine_values[r][col] = numbers[r][col]# Function for clearing the terminal
def clear():os.system("clear")      # Function to display the instructions
def instructions():print("Instructions:")print("1. Enter row and column number to select a cell, Example \"2 3\"")print("2. In order to flag a mine, enter F after row and column numbers, Example \"2 3 F\"")# Function to check for completion of the game
def check_over():global mine_valuesglobal nglobal mines_no# Count of all numbered valuescount = 0# Loop for checking each cell in the gridfor r in range(n):for col in range(n):# If cell not empty or flaggedif mine_values[r][col] != ' ' and mine_values[r][col] != 'F':count = count + 1# Count comparison          if count == n * n - mines_no:return Trueelse:return False# Display all the mine locations                    
def show_mines():global mine_valuesglobal numbersglobal nfor r in range(n):for col in range(n):if numbers[r][col] == -1:mine_values[r][col] = 'M'if __name__ == "__main__":# Size of gridn = 8# Number of minesmines_no = 8# The actual values of the gridnumbers = [[0 for y in range(n)] for x in range(n)] # The apparent values of the gridmine_values = [[' ' for y in range(n)] for x in range(n)]# The positions that have been flaggedflags = []# Set the minesset_mines()# Set the valuesset_values()# Display the instructionsinstructions()# Variable for maintaining Game Loopover = False# The GAME LOOP while not over:print_mines_layout()# Input from the userinp = input("Enter row number followed by space and column number = ").split()# Standard inputif len(inp) == 2:# Try block to handle errant inputtry: val = list(map(int, inp))except ValueError:clear()print("Wrong input!")instructions()continue# Flag inputelif len(inp) == 3:if inp[2] != 'F' and inp[2] != 'f':clear()print("Wrong Input!")instructions()continue# Try block to handle errant input  try:val = list(map(int, inp[:2]))except ValueError:clear()print("Wrong input!")instructions()continue# Sanity checks if val[0] > n or val[0] < 1 or val[1] > n or val[1] < 1:clear()print("Wrong input!")instructions()continue# Get row and column numbersr = val[0]-1col = val[1]-1 # If cell already been flaggedif [r, col] in flags:clear()print("Flag already set")continue# If cell already been displayedif mine_values[r][col] != ' ':clear()print("Value already known")continue# Check the number for flags    if len(flags) < mines_no:clear()print("Flag set")# Adding flag to the listflags.append([r, col])# Set the flag for displaymine_values[r][col] = 'F'continueelse:clear()print("Flags finished")continue    else: clear()print("Wrong input!")   instructions()continue# Sanity checksif val[0] > n or val[0] < 1 or val[1] > n or val[1] < 1:clear()print("Wrong Input!")instructions()continue# Get row and column numberr = val[0]-1col = val[1]-1# Unflag the cell if already flaggedif [r, col] in flags:flags.remove([r, col])# If landing on a mine --- GAME OVER    if numbers[r][col] == -1:mine_values[r][col] = 'M'show_mines()print_mines_layout()print("Landed on a mine. GAME OVER!!!!!")over = Truecontinue# If landing on a cell with 0 mines in neighboring cellselif numbers[r][col] == 0:vis = []mine_values[r][col] = '0'neighbours(r, col)# If selecting a cell with atleast 1 mine in neighboring cells  else:   mine_values[r][col] = numbers[r][col]# Check for game completion if(check_over()):show_mines()print_mines_layout()print("Congratulations!!! YOU WIN")over = Truecontinueclear() 

结论

我们希望本教程能让大家明白如何创建自己的扫雷游戏,并从中获得乐趣。如有任何疑问,欢迎在下方评论。

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

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

相关文章

Linux系统下anaconda的安装与Pytorch环境的下载

首先&#xff0c;在命令行通过cd命令&#xff0c;进入用户文件夹 cd xxx/xxx/username进入anaconda官网https://repo.anaconda.com/archive/&#xff0c;寻找anaconda下载包资源&#xff0c;这里选择最新的anaconda下载包 Anaconda3-2024.06-1-Linux-x86_64.sh 在命令行执行安…

Python爬虫-获取懂车帝“指定车型”的销量数据

前言 本文是该专栏的第33篇,后面会持续分享python爬虫干货知识,记得关注。 在本专栏之前,笔者有详细介绍关于懂车平台的相关爬虫,如下所示: 1. Python爬虫-新能源汽车对应的“年份月份”销量榜 2. Python爬虫-懂车帝城市销量榜单 3. Python爬虫-新能源汽车销量榜 4. Pyth…

:-1: error: ninja: build stopped: subcommand failed.

错误解释&#xff1a; 这个错误通常出现在使用Ninja构建系统进行软件编译时。Ninja是一个小型的构建系统&#xff0c;它比make更快&#xff0c;因为它直接调用指定的命令来执行构建&#xff0c;而不是像make那样通过一套复杂的规则和依赖关系来进行。如果在Ninja构建过程中遇到…

气膜建筑如何在文化旅游行业中应用—轻空间

一、气膜建筑简介 气膜建筑是一种新型建筑形式&#xff0c;其主要结构由高强度膜材、空气支撑系统和固定系统组成。通过不断向膜体内部充气&#xff0c;使其形成稳定的内部压力来支撑整个建筑结构。气膜建筑因其建设速度快、成本相对较低、环保节能等优点&#xff0c;近年来在各…

阶段三:项目开发---大数据开发运行环境搭建:任务3:安装配置Hadoop集群

任务描述 知识点&#xff1a;安装配置Hadoop 重 点&#xff1a; 安装配置Hadoop 难 点&#xff1a;无 内 容&#xff1a; Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下&#xff0c;开发分布式程序。充分利用集群的威…

Linux系统编程——线程控制

目录 一&#xff0c;关于线程控制 二&#xff0c;线程创建 2.1 pthread_create函数 2.2 ps命令查看线程信息 三&#xff0c;线程等待 3.1 pthread_join函数 3.2 创建多个线程 3.3 pthread_join第二个参数 四&#xff0c;线程终止 4.1 关于线程终止 4.2 pthread_exit…

【软件设计师】九、数据流图、UML图

知识点1&#xff1a;数据流图 数据路流图亦称为数据流程图&#xff0c;一种便于用户理解&#xff0c;分析系统数据流称的图形工具&#xff1b;买哦书系统的功能&#xff0c;输入&#xff0c;输出&#xff0c;数据存储等&#xff1b; 知识点2&#xff1a;数据字典 数据流&…

深度学习 - 模型剪枝技术详解

模型剪枝简介 模型剪枝&#xff08;Model Pruning&#xff09;是一种通过减少模型参数来降低模型复杂性的方法&#xff0c;从而加快推理速度并减少内存消耗&#xff0c;同时尽量不显著降低模型性能。这种技术特别适用于资源受限的设备&#xff0c;如移动设备和嵌入式系统。模型…

提示词工程课程,白嫖A100活动课程

扫下面二维码即可参加 免费使用A100&#xff0c;学习大模型相关知识&#xff01; 前置知识&#xff1a; 内容来源&#xff1a;Docs 模型设置 在使用提示词的时候&#xff0c;您会通过 API 或者网页版与大语言模型进行交互&#xff0c;将这些参数、设置调整到最佳程度会提高使…

面试题 12. 矩阵中的路径

矩阵中的路径 题目描述示例 题解 题目描述 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 单词必须按照字母顺序&#xff0c;通过相邻的单元格内的字母构成&#xff0…

14-47 剑和诗人21 - 2024年如何打造AI创业公司

​​​​​ 2024 年&#xff0c;随着人工智能继续快速发展并融入几乎所有行业&#xff0c;创建一家人工智能初创公司将带来巨大的机遇。然而&#xff0c;在吸引资金、招聘人才、开发专有技术以及将产品推向市场方面&#xff0c;人工智能初创公司也面临着相当大的挑战。 让我来…

UML中用例和用例图的概念

用例 用例模型的基本组成部分有用例、参与者&#xff08;或角色&#xff09;和系统。用例用于描述系统的功能&#xff0c;也就是从用户的角度来说&#xff0c;系统具体应包含哪些功能&#xff0c;从而帮助分析人员理解系统的行为。它是对系统功能的宏观的、整体的描述。一个完…

idea中的块映射中的子元素无效

在yml文件中&#xff0c;出现块映射中的子元素无效&#xff0c;如图&#xff1a; 在YAML文件中&#xff0c;通常需要在键和值之间添加空格&#xff0c;以确保文件的可读性和正确解析。一些YAML解析器可能要求在冒号后面必须有空格才能正确解析文件。如果不加空格&#xff0c;解…

TEE开发Secure driver介绍-TEE安全驱动/trustzone

快速链接: . 👉👉👉 个人博客笔记导读目录(全部) 👈👈👈 付费专栏-付费课程 【购买须知】:【精选】TEE从入门到精通-[目录] 👈👈👈思考: 如何开发一个TA? sdk又是什么?开发一个TA的流程是怎样的?How to do?有关TA的签名介绍TEE开发Secure driver介绍RP…

RedHat运维-Linux存储管理基础3-创建并扩展逻辑卷

逻辑卷的核心&#xff1a;____________________________________________&#xff1b; 逻辑卷的核心&#xff1a;____________________________________________&#xff1b; 逻辑卷的核心&#xff1a;____________________________________________&#xff1b; 1. 已知/dev/s…

使用Zipkin与Spring Cloud Sleuth进行分布式跟踪

在微服务架构中&#xff0c;服务之间的调用链路可能非常复杂&#xff0c;这使得问题定位和性能优化变得困难。为了解决这个问题&#xff0c;我们可以使用分布式跟踪系统来监控和诊断整个微服务架构中的请求链路。Zipkin和Spring Cloud Sleuth是两个非常流行的工具&#xff0c;它…

华为HCIP Datacom H12-821 卷32

1、默认情况下&#xff0c;IS-IS Leve1-1-2路由器会将Leve1-2区域的明细路由信息发布到Level-1区域、保证level-1区域的路由器能够正常访问骨干区域的设备 A、对 B、错 正确答案&#xff1a; B 解析&#xff1a;不会发布&#xff0c;需要用到路由泄露。 2、BGP在建立邻居…

JAVA中关于compareTo方法的原理深挖

一、compareTo()方法 在深挖compareTo方法前&#xff0c;首先我们需要了解compareTo方法的来龙去脉。compareTo方法的目的是用来比较两个对象的大小的。假如有两个对象a1&#xff0c;a2。包含姓名&#xff0c;年龄&#xff0c;身高三个属性&#xff0c;现在要求根据年龄或者性…

变长输入神经网络设计

我对使用 PyTorch 可以轻松构建动态神经网络的想法很感兴趣&#xff0c;因此我决定尝试一下。 我脑海中的应用程序具有可变数量的相同类型的输入。对于可变数量的输入&#xff0c;已经使用了循环或递归神经网络。但是&#xff0c;这些结构在给定行的输入之间施加了一些顺序或层…

使用 Conda 管理 Python 环境的详细指南

使用 Conda 管理 Python 环境的详细指南 在安装 Python 时&#xff0c;我们通常会选择 Anaconda 作为管理工具&#xff0c;因为它不仅提供了 Python 的安装包&#xff0c;还集成了许多常用的库和工具&#xff0c;非常适合数据科学和机器学习的工作。Conda 是 Anaconda 中的一个…