【Dison夏令营 Day 02】使用 Python 玩井字游戏

在本文中,我们将介绍使用 Python 语言从零开始创建井字游戏的步骤。

在这里插入图片描述
在本文中,我们将介绍使用 Python 语言从零开始创建井字游戏的步骤。

游戏简介

井字游戏是一种双人游戏,在 3×3 正方形网格上进行。每位玩家轮流占据一个单元格,目标是按水平、垂直或对角线模式放置三个标记。一名玩家使用十字 "X "作为标记,另一名玩家则使用无 "O "标记。


步骤 1:井字棋设计

我们将在命令行上玩井字游戏,因此首先要为井字游戏设计一个图案。

在这里插入图片描述

如果玩家需要标记某个方格,则必须输入方格中显示的相应数字。假设我们想占据中间的方格,那么我们就在终端输入 5。这个网格可以通过以下方式生成

注意:在python代码中,在一行前添加“#”,代表注释,不会被编译,常作为函数的理解。

# 打印井字的函数
def print_tic_tac_toe(values)print("\n")
    print("\t | |")
    print("\t {} | {} | {}".format(values[0], values[1], values[2]))
    print('\t_____|_____|_____')
 
    print("\t | |")
    print("\t {}| {} | {}".format(values[3], values[4], values[5]))
    print('\t_____|_____|_____')
 
    print("\t | |")
 
    print("\t {}| {} | {}".format(values[6], values[7], values[8]))
    print("\t | |")
    print("\n")

在上面的代码中,函数根据参数值创建井字游戏。这里的参数 values 是一个列表,包含网格中每个单元格的状态。

步骤 2:使用数据结构存储信息

任何游戏的核心都是其背后的游戏机制。由于这是一款相当容易制作的游戏,因此所涉及的机制也很简单。

在任何一瞬间,我们都需要两个关键信息:

  • 网格的状态: 我们必须有一个数据结构来存储每个单元格的状态,即它是被占用还是空置。
  • 每个棋手的棋步 : 我们必须以某种方式掌握每个棋手过去和现在的棋步,即 "X "和 "O "所占据的位置。

注:这两种信息都可以通过网格的状态来获取,但每次我们需要玩家的位置时,都需要遍历网格。这可以称为时间与空间复杂性的权衡。这是一种节省时间的通用技术。

# 单次井字游戏的函数
def single_game(cur_player)# 表示井字游戏
    values = [' ' for x in range(9)] # 表示井字游戏。
     
    # 存储 X 和 O 所占的位置
    player_pos = {'X':[], 'O':[]}

网格的状态由一个字符列表管理,该列表有三种可能的值:

  • ’ ’ —— 空格
  • ‘X’ —— 玩家 X 占用的单元格
  • ‘O’ —— 玩家 O 占用的单元格

每个棋手的棋步都以整数列表的字典形式存储。每个棋手的键分别是 "X "和 “O”。它们对应的列表包含它们所占网格单元的数字。

注:变量 cur_player 存储了当前玩家的移动位置,如 "X "或 “O”。

步骤 3:游戏循环

每个游戏都有某种游戏循环,循环运行直到某个玩家获胜或游戏以平局结束。在井字游戏中,每个循环迭代指的是棋手的一次走棋。

# 一次井字游戏的游戏循环 
while True:
	print_tic_tac_toe(values)

步骤 4:处理玩家输入

在每次游戏迭代中,玩家都必须输入自己的棋步。

# 尝试 MOVE 输入的异常块
try:
    print("Player ", cur_player, " turn. Which box? : ", end="")
    move = int(input()) 
except ValueError:
    print("Wrong Input!!! Try Again")
    continue
 
# 对 inout 中的 MOVE 进行正确性检查 
if move < 1 or move > 9:
    print("Wrong Input!!! Try Again")
    continue
 
# 检查方框是否已被占用 
if values[move-1] != ' ':
    print("Place already filled. Try again!!")
    continue

我们创建了一个 try 块,以防玩家输入了一些非预期值。这样的事件一定不会让游戏停止,因此我们会处理 ValueError 异常,然后继续游戏。

我们需要执行一些合理性检查,比如输入的值是否是有效位置,如果是有效位置,是否已经被占用?

步骤 5:更新信息

根据玩家的输入,我们需要更新信息,以便游戏顺利进行。

# 更新游戏信息
 
# 更新网格状态
values[move-1] = cur_player
 
# 更新棋手位置
player_pos[cur_player].append(move)

值列表会根据当前玩家更新所占的单元格。玩家位置会添加当前玩家刚刚占据的位置。

更新值列表并调用 print_tic_tac_toe() 函数后,网格看起来就像这样了:

在这里插入图片描述

步骤 6:检查胜负

每走一步棋后,我们都要检查是否有棋手获胜或平局。检查方法如下

功能调用:

# 调用函数检查是否获胜
if check_win(player_pos, cur_player):
    print_tic_tac_toe(values)
    print("Player ", cur_player, " has won the game!!")
    print("\n")
    return cur_player
 
# 调用函数检查平局
if check_draw(player_pos):
    print_tic_tac_toe(values)
    print("Game Drawn")
    print("\n")
    return 'D'

如果任何棋手获胜,那么 single_game() 函数将返回当前下棋的棋手。如果棋局平局,则返回 “D”。

代码

# 检查是否有玩家获胜的功能
def check_win(player_pos, cur_player):
 
    # 所有可能的获胜组合
    soln = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [1, 4, 7], [2, 5, 8], [3, 6, 9], [1, 5, 9], [3, 5, 7]]
 
    # 循环检查是否满足任何中奖组合
    for x in soln:
        if all(y in player_pos[cur_player] for y in x):
 
            # 如果任何获胜组合满足以下条件,则返回 True
            return True
    # 如果不满足任何组合,则返回 False
    return False       
 
# 检查游戏是否平局的函数
def check_draw(player_pos):
    if len(player_pos['X']) + len(player_pos['O']) == 9:
        return True
    return False   

check_win():该函数包含所有获胜组合。它所做的就是检查当前玩家的位置是否满足任何获胜组合。如果满足,则返回 True。如果任何组合都不符合,则函数返回 False。

check_draw():平局条件相当简单,因为当所有 "9 "个位置都被占满时,游戏就会平局。

步骤 7:切换当前玩家

由于每个棋手每次只能移动一次,因此每次成功移动后,我们都必须交换当前棋手。

# 切换玩家移动
if cur_player == 'X':
    cur_player = 'O'
else:
    cur_player = 'X'

就单个游戏而言,这就是我们需要做的。不过,如果玩家想进行多局游戏,本文还介绍了一个记分牌系统,用于跟踪记录。

步骤 8:输入玩家姓名

任何计分板都必须显示每位玩家的姓名。

if __name__ == "__main__":
 
    print("Player 1")
    player1 = input("Enter the name : ")
    print("\n")
 
    print("Player 2")
    player2 = input("Enter the name : ")
    print("\n")

步骤 9:存储游戏相关信息

需要存储的信息包括:当前玩家、玩家选择(叉或圈)、可用选项(叉和圈)以及记分牌。

# 存储选择 X 和 O 的玩家
cur_player = player1
 
# 存储玩家的选择
player_choice = {'X' : "", 'O' : ""}
 
# 存储选项
options = ['X', 'O']
 
# 存储记分板
score_board = {player1: 0, player2: 0}

默认情况下,当前玩家是最先输入名字的玩家。

步骤 10:设计记分牌

记分板以字典形式存储,键为玩家姓名,值为胜场数。

# 打印记分牌的功能
def print_scoreboard(score_board):
    print("--------------------------------")
    print("            SCOREBOARD       ")
    print("--------------------------------")
 
    players = list(score_board.keys())
    print("   ", players[0], "    ", score_board[players[0]])
    print("   ", players[1], "    ", score_board[players[1]])
 
    print("--------------------------------\n")

要显示记分牌,我们需要球员的名字。我们使用 .keys() 函数提取键值,然后将其转换为列表,以便在显示分数时进行索引。

步骤 11:外部游戏循环

我们需要另一个游戏循环来管理多场井字游戏。每场比赛中,当前玩家都要选择自己的标记("X "或 “O”)。选择菜单必须在每次游戏迭代中显示:

# 一系列井字游戏的环路
# 循环运行,直到玩家退出
while True:
 
    # 玩家选择菜单
    print("Turn to choose for", cur_player)
    print("Enter 1 for X")
    print("Enter 2 for O")
    print("Enter 3 to Quit")

记分牌和菜单是这样的
在这里插入图片描述

步骤 12:处理和分配玩家选择

每次迭代,我们都要处理并存储当前玩家的选择。

# 尝试 CHOICE 输入的异常
try:
    choice = int(input())   
except ValueError:
    print("Wrong Input!!! Try Again\n")
    continue
 
# 玩家选择的条件 
if choice == 1:
    player_choice['X'] = cur_player
    if cur_player == player1:
        player_choice['O'] = player2
    else:
        player_choice['O'] = player1
 
elif choice == 2:
    player_choice['O'] = cur_player
    if cur_player == player1:
        player_choice['X'] = player2
    else:
        player_choice['X'] = player1
         
elif choice == 3:
    print("Final Scores")
    print_scoreboard(score_board)
    break  
 
else:
    print("Wrong Choice!!!! Try Again\n")

根据玩家的选择,数据已被存储。这一点非常重要,因为每场比赛结束后,它都会告诉我们哪位选手获胜。

步骤 13:执行匹配

存储完所有必要信息后,就可以执行独立比赛并存储获胜分数了。

# 存储单局井字游戏的获胜者
winner = single_game(options[choice-1])

步骤 14:更新记分牌

每次井字游戏结束后,我们都需要更新记分板。

# 根据胜负更新记分板
if winner != 'D' :
    player_won = player_choice[winner]
    score_board[player_won] = score_board[player_won] + 1
 
print_scoreboard(score_board)

如果比赛没有以平局结束,我们将更新记分牌。

步骤 15:切换选择播放器

每个玩家都必须有机会选择自己想要的标记,这是一个宽宏大量的想法。为此,我们要交换 cur_player 中的值。

# 切换选择 X 或 O 的玩家
if cur_player == player1:
    cur_player = player2
else:
    cur_player = player1

完整的工作代码

# Function to print Tic Tac Toe
def print_tic_tac_toe(values):
    print("\n")
    print("\t     |     |")
    print("\t  {}  |  {}  |  {}".format(values[0], values[1], values[2]))
    print('\t_____|_____|_____')
 
    print("\t     |     |")
    print("\t  {}  |  {}  |  {}".format(values[3], values[4], values[5]))
    print('\t_____|_____|_____')
 
    print("\t     |     |")
 
    print("\t  {}  |  {}  |  {}".format(values[6], values[7], values[8]))
    print("\t     |     |")
    print("\n")
 
 
# Function to print the score-board
def print_scoreboard(score_board):
    print("\t--------------------------------")
    print("\t              SCOREBOARD       ")
    print("\t--------------------------------")
 
    players = list(score_board.keys())
    print("\t   ", players[0], "\t    ", score_board[players[0]])
    print("\t   ", players[1], "\t    ", score_board[players[1]])
 
    print("\t--------------------------------\n")
 
# Function to check if any player has won
def check_win(player_pos, cur_player):
 
    # All possible winning combinations
    soln = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [1, 4, 7], [2, 5, 8], [3, 6, 9], [1, 5, 9], [3, 5, 7]]
 
    # Loop to check if any winning combination is satisfied
    for x in soln:
        if all(y in player_pos[cur_player] for y in x):
 
            # Return True if any winning combination satisfies
            return True
    # Return False if no combination is satisfied       
    return False       
 
# Function to check if the game is drawn
def check_draw(player_pos):
    if len(player_pos['X']) + len(player_pos['O']) == 9:
        return True
    return False       
 
# Function for a single game of Tic Tac Toe
def single_game(cur_player):
 
    # Represents the Tic Tac Toe
    values = [' ' for x in range(9)]
     
    # Stores the positions occupied by X and O
    player_pos = {'X':[], 'O':[]}
     
    # Game Loop for a single game of Tic Tac Toe
    while True:
        print_tic_tac_toe(values)
         
        # Try exception block for MOVE input
        try:
            print("Player ", cur_player, " turn. Which box? : ", end="")
            move = int(input()) 
        except ValueError:
            print("Wrong Input!!! Try Again")
            continue
 
        # Sanity check for MOVE inout
        if move < 1 or move > 9:
            print("Wrong Input!!! Try Again")
            continue
 
        # Check if the box is not occupied already
        if values[move-1] != ' ':
            print("Place already filled. Try again!!")
            continue
 
        # Update game information
 
        # Updating grid status 
        values[move-1] = cur_player
 
        # Updating player positions
        player_pos[cur_player].append(move)
 
        # Function call for checking win
        if check_win(player_pos, cur_player):
            print_tic_tac_toe(values)
            print("Player ", cur_player, " has won the game!!")     
            print("\n")
            return cur_player
 
        # Function call for checking draw game
        if check_draw(player_pos):
            print_tic_tac_toe(values)
            print("Game Drawn")
            print("\n")
            return 'D'
 
        # Switch player moves
        if cur_player == 'X':
            cur_player = 'O'
        else:
            cur_player = 'X'
 
if __name__ == "__main__":
 
    print("Player 1")
    player1 = input("Enter the name : ")
    print("\n")
 
    print("Player 2")
    player2 = input("Enter the name : ")
    print("\n")
     
    # Stores the player who chooses X and O
    cur_player = player1
 
    # Stores the choice of players
    player_choice = {'X' : "", 'O' : ""}
 
    # Stores the options
    options = ['X', 'O']
 
    # Stores the scoreboard
    score_board = {player1: 0, player2: 0}
    print_scoreboard(score_board)
 
    # Game Loop for a series of Tic Tac Toe
    # The loop runs until the players quit 
    while True:
 
        # Player choice Menu
        print("Turn to choose for", cur_player)
        print("Enter 1 for X")
        print("Enter 2 for O")
        print("Enter 3 to Quit")
 
        # Try exception for CHOICE input
        try:
            choice = int(input())   
        except ValueError:
            print("Wrong Input!!! Try Again\n")
            continue
 
        # Conditions for player choice  
        if choice == 1:
            player_choice['X'] = cur_player
            if cur_player == player1:
                player_choice['O'] = player2
            else:
                player_choice['O'] = player1
 
        elif choice == 2:
            player_choice['O'] = cur_player
            if cur_player == player1:
                player_choice['X'] = player2
            else:
                player_choice['X'] = player1
         
        elif choice == 3:
            print("Final Scores")
            print_scoreboard(score_board)
            break  
 
        else:
            print("Wrong Choice!!!! Try Again\n")
 
        # Stores the winner in a single game of Tic Tac Toe
        winner = single_game(options[choice-1])
         
        # Edits the scoreboard according to the winner
        if winner != 'D' :
            player_won = player_choice[winner]
            score_board[player_won] = score_board[player_won] + 1
 
        print_scoreboard(score_board)
        # Switch player who chooses X or O
        if cur_player == player1:
            cur_player = player2
        else:
            cur_player = player1

游戏时间到

创建游戏的所有步骤都已完成。现在是玩游戏的时候了。

Player 1
Enter the name : Luffy
 
 
Player 2
Enter the name : Sanji
 
 
    --------------------------------
               SCOREBOARD       
    --------------------------------
        Luffy        0
        Sanji        0
    --------------------------------
 
Turn to choose for Luffy
Enter 1 for X
Enter 2 for O
Enter 3 to Quit
1
 
 
         |     |
         |     |   
    _____|_____|_____
         |     |
         |     |   
    _____|_____|_____
         |     |
         |     |   
         |     |
 
 
Player  X  turn. Which box? : 5
 
 
         |     |
         |     |   
    _____|_____|_____
         |     |
         |  X  |   
    _____|_____|_____
         |     |
         |     |   
         |     |
 
 
Player  O  turn. Which box? : 1
 
 
         |     |
      O  |     |   
    _____|_____|_____
         |     |
         |  X  |   
    _____|_____|_____
         |     |
         |     |   
         |     |
 
 
Player  X  turn. Which box? : 9
 
 
         |     |
      O  |     |   
    _____|_____|_____
         |     |
         |  X  |   
    _____|_____|_____
         |     |
         |     |  X
         |     |
 
 
Player  O  turn. Which box? : 2
 
 
         |     |
      O  |  O  |   
    _____|_____|_____
         |     |
         |  X  |   
    _____|_____|_____
         |     |
         |     |  X
         |     |
 
 
Player  X  turn. Which box? : 3
 
 
         |     |
      O  |  O  |  X
    _____|_____|_____
         |     |
         |  X  |   
    _____|_____|_____
         |     |
         |     |  X
         |     |
 
 
Player  O  turn. Which box? : 7
 
 
         |     |
      O  |  O  |  X
    _____|_____|_____
         |     |
         |  X  |   
    _____|_____|_____
         |     |
      O  |     |  X
         |     |
 
 
Player  X  turn. Which box? : 6
 
 
         |     |
      O  |  O  |  X
    _____|_____|_____
         |     |
         |  X  |  X
    _____|_____|_____
         |     |
      O  |     |  X
         |     |
 
 
Player  X  has won the game!!
 
 
    --------------------------------
               SCOREBOARD       
    --------------------------------
        Luffy        1
        Sanji        0
    --------------------------------
 
Turn to choose for Sanji
Enter 1 for X
Enter 2 for O
Enter 3 to Quit
2
 
 
         |     |
         |     |   
    _____|_____|_____
         |     |
         |     |   
    _____|_____|_____
         |     |
         |     |   
         |     |
 
 
Player  O  turn. Which box? : 5
 
 
         |     |
         |     |   
    _____|_____|_____
         |     |
         |  O  |   
    _____|_____|_____
         |     |
         |     |   
         |     |
 
 
Player  X  turn. Which box? : 3
 
 
         |     |
         |     |  X
    _____|_____|_____
         |     |
         |  O  |   
    _____|_____|_____
         |     |
         |     |   
         |     |
 
 
Player  O  turn. Which box? : 2
 
 
         |     |
         |  O  |  X
    _____|_____|_____
         |     |
         |  O  |   
    _____|_____|_____
         |     |
         |     |   
         |     |
 
 
Player  X  turn. Which box? : 8
 
 
         |     |
         |  O  |  X
    _____|_____|_____
         |     |
         |  O  |   
    _____|_____|_____
         |     |
         |  X  |   
         |     |
 
 
Player  O  turn. Which box? : 1
 
 
         |     |
      O  |  O  |  X
    _____|_____|_____
         |     |
         |  O  |   
    _____|_____|_____
         |     |
         |  X  |   
         |     |
 
 
Player  X  turn. Which box? : 9
 
 
         |     |
      O  |  O  |  X
    _____|_____|_____
         |     |
         |  O  |   
    _____|_____|_____
         |     |
         |  X  |  X
         |     |
 
 
Player  O  turn. Which box? : 6
 
 
         |     |
      O  |  O  |  X
    _____|_____|_____
         |     |
         |  O  |  O
    _____|_____|_____
         |     |
         |  X  |  X
         |     |
 
 
Player  X  turn. Which box? : 7
 
 
         |     |
      O  |  O  |  X
    _____|_____|_____
         |     |
         |  O  |  O
    _____|_____|_____
         |     |
      X  |  X  |  X
         |     |
 
 
Player  X  has won the game!!
 
 
    --------------------------------
               SCOREBOARD       
    --------------------------------
        Luffy        2
        Sanji        0
    --------------------------------
 
Turn to choose for Luffy
Enter 1 for X
Enter 2 for O
Enter 3 to Quit
3
Final Scores
    --------------------------------
               SCOREBOARD       
    --------------------------------
        Luffy        2
        Sanji        0
    --------------------------------

结论

希望这篇文章能给读者带来乐趣和信息。如果对游戏有任何建议,欢迎发表评论。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CMake(1)基础使用

CMake之(1)基础使用 Author: Once Day Date: 2024年6月29日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文章可参考专栏: Linux实践记录_Once-Day的博客-CSDN博客…

双指针算法第一弹(移动零 复写零 快乐数)

目录 前言 1. 移动零 &#xff08;1&#xff09;题目及示例 &#xff08;2&#xff09;一般思路 &#xff08;3&#xff09;双指针解法 2. 复写零 &#xff08;1&#xff09;题目及示例 &#xff08;2&#xff09;一般解法 &#xff08;3&#xff09;双指针解法 3. 快…

计算机基础知识——C基础+C指针+char类型

指针 这里讲的很细 https://blog.csdn.net/weixin_43624626/article/details/130715839 内存地址&#xff1a;内存中每个字节单位都有一个编号&#xff08;一般用十六进制表示&#xff09; 存储类型 数据类型 *指针变量名&#xff1b;int *p; //定义了一个指针变量p,指向的数…

在Redis中使用Lua脚本实现多条命令的原子性操作

Redis作为一个高性能的键值对数据库&#xff0c;被广泛应用于各种场景。然而&#xff0c;在某些情况下&#xff0c;我们需要执行一系列Redis命令&#xff0c;并确保这些命令的原子性。这时&#xff0c;Lua脚本就成为了一个非常实用的解决方案。 问题的提出 假设我们有一个计数…

【深度学习】图形模型基础(2):概率机器学习模型与人工智能

1.引言 1.1.背景 当机器需要从经验中汲取知识时&#xff0c;概率建模成为了一个至关重要的工具。它不仅为理解学习机制提供了理论框架&#xff0c;而且在实际应用中&#xff0c;特别是在设计能够从数据中学习的机器时&#xff0c;概率建模展现出了其独特的价值。概率框架的核…

Power BI可视化表格矩阵如何保持样式导出数据?

故事背景&#xff1a; 有朋友留言询问&#xff1a;自己从Power BI可视化矩阵表格中导出数据时&#xff0c;导出的表格样式会发生改变&#xff0c;需要线下再手动调整&#xff0c;重新进行透视组合成自己想要的格式。 有没有什么办法让表格导出来跟可视化一样&#xff1f; Po…

汽车电子工程师入门系列——CAN 规范系列通读

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…

SiteSucker Pro for Mac:一键下载整站,轻松备份与离线浏览!

SiteSucker Pro for Mac是一款专为苹果电脑用户设计的网站下载与备份工具&#x1f578;️。它以其强大的整站下载能力和用户友好的界面&#xff0c;成为了众多Mac用户备份网站、离线浏览的得力助手&#x1f4bb;。 这款软件允许用户一键下载整个网站&#xff0c;包括所有的网页…

Docker(八)-Docker运行mysql8容器实例

1.运行mysql8容器实例并挂载数据卷 -e:配置环境变量 --lower_case_table_names1 设置忽略表名大小写一定要放在镜像之后运行mysql8容器实例之前&#xff0c;先查看是否存在mysql8镜像以及是否存在已运行的mysql实例docker run -d -p 3306:3306 --privilegedtrue -v 【宿主机日…

L03_Redis知识图谱

这些知识点你都掌握了吗?大家可以对着问题看下自己掌握程度如何?对于没掌握的知识点,大家自行网上搜索,都会有对应答案,本文不做知识点详细说明,只做简要文字或图示引导。 Redis 全景图 Redis 知识全景图都包括什么呢?简单来说,就是“两大维度,三大主线”。 Redis …

MySQL连接IDEA(Java Web)保姆级教程

第一步&#xff1a;新建项目(File)->Project 第二步&#xff1a;New Project(JDK最好设置1.8版本与数据库适配&#xff0c;详细适配网请到MySQL官网查询MySQL :: MySQL 8.3 Reference Manual :: Search Results) 第三步&#xff1a;点中MySQLTest(项目名)并连续双击shift键-…

昇思25天学习打卡营第2天|数据集Dataset

学习目标&#xff1a;熟练掌握mindspore.dataset mindspore.dataset中有常用的视觉、文本、音频开源数据集供下载&#xff0c;点赞、关注收藏哦 了解mindspore.dataset mindspore.dataset应用实践 拓展自定义数据集 昇思平台学习时间记录: 一、关于mindspore.dataset minds…

【STM32】在标准库中使用定时器

1.TIM简介 STM32F407系列控制器有2个高级控制定时器、10个通用定时器和2个基本定时器。通常情况下&#xff0c;先看定时器挂在哪个总线上APB1或者APB2&#xff0c;然后定时器时钟需要在此基础上乘以2。 2.标准库实现定时中断 #ifndef __BSP_TIMER_H #define __BSP_TIMER_H#if…

.[emcrypts@tutanota.de].mkp勒索病毒新变种该如何应对?

引言 在数字化时代&#xff0c;随着信息技术的迅猛发展&#xff0c;网络安全问题日益凸显。其中&#xff0c;勒索病毒作为一种极具破坏力的恶意软件&#xff0c;给个人和企业带来了巨大的经济损失和数据安全风险。近期&#xff0c;一种名为“.mkp勒索病毒”的新型威胁开始在网络…

多线程引发的安全问题

前言&#x1f440;~ 上一章我们介绍了线程的一些基础知识点&#xff0c;例如创建线程、查看线程、中断线程、等待线程等知识点&#xff0c;今天我们讲解多线程下引发的安全问题 线程安全&#xff08;最复杂也最重要&#xff09; 产生线程安全问题的原因 锁&#xff08;重要…

在 Python 中创建列表时,应该写 `[]` 还是 `list()`?

在 Python 中&#xff0c;创建列表有两种写法&#xff1a; # 写法一&#xff1a;使用一对方括号 list_1 []# 写法二&#xff1a;调用 list() list_2 list() 那么哪种写法更好呢&#xff1f; 单从写法上来看&#xff0c;[] 要比 list() 简洁&#xff0c;那在性能和功能方面…

江科大笔记—读写内部闪存FLASH读取芯片ID

读写内部闪存FLASH 右下角是OLED&#xff0c;然后左上角在PB1和PB11两个引脚&#xff0c;插上两个按键用于控制。下一个代码读取芯片ID&#xff0c;这个也是接上一个OLED&#xff0c;能显示测试数据就可以了。 STM32-STLINK Utility 本节的代码调试&#xff0c;使用辅助软件…

[机缘参悟-200] - 对自然、人性、人生、人心、人际、企业、社会、宇宙全面系统的感悟 - 全图解

对自然、人性、人生、人心、人际、企业、社会、宇宙进行全面系统的感悟&#xff0c;是一个极其深邃且复杂的主题。以下是对这些领域的简要感悟&#xff1a; 自然&#xff1a; 自然是人类生存的根基&#xff0c;它充满了无尽的奥秘和美丽。自然界的平衡和循环规律&#xff0c;教…

运算符重载之日期类的实现

接上一篇文章&#xff0c;废话不多说&#xff0c;直接上代码 Date.h #pragma once #include<iostream> using namespace std; #include<assert.h>class Date {//友元函数声明friend ostream& operator<<(ostream& out, const Date& d);friend …

学编程容易遇到的误区,请提前规避

随着互联网行业的蓬勃发展和编程技术的普及&#xff0c;越来越多的人开始对编程感兴趣。然而&#xff0c;编程学习并非一蹴而就&#xff0c;新手入门时常常会陷入误区&#xff0c;影响学习状态效率。 今天&#xff0c;我们来一起揭开编程学习常见的五大误区&#xff0c;希望能…