编程中的##(两个井号)和#(一个井号)都是什么意思

连接符 ##( 两个井号)
不知道什么符 #(一个井号)
## 连接符号由 两个井号组成,其功能是在带参数的宏定义中将两个子串(token)联接起来,从而形成一个新的子串。但它不可以是第一个或者最后一个子串。所谓的子串(token)就是指编译器能够识别的最小语法单元。具体的定义在编译原理里有详尽的解释
#符是把传递过来的参数当成字符串进行替代。

假设程序中已经定义了这样一个带参数的宏:
#define PRINT( n ) printf( "token" #n " = %d", token##n )
同时又定义了二个整形变量:
int token9 = 9;
现在在主程序中以下面的方式调用这个宏:
PRINT( 9 );
那么在编译时,上面的这句话被扩展为:
printf( "token" "9" " = %d", token9 );
注意到在这个例子中,PRINT(9);中的这个”9”被原封不动的当成了一个字符串,与”token”连接在了一起,从而成为了token9。而#n也被”9”所替代。
可想而知,上面程序运行的结果就是在屏幕上打印出token9=9
还有点不明白?!
再来一个例子:
#define PRINT( n ) printf( "token" #n " = %d", game##n )
int token9 = 9;
int game9 = 99;
调用:
PRINT(9);
屏幕上打印出:
token9 = 99; :)~
 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一个简单的井字游戏的Python代码,并进行详细的讲解。 代码如下: ```python board = [&#39; &#39; for x in range(10)] def insertLetter(letter, pos): board[pos] = letter def spaceIsFree(pos): return board[pos] == &#39; &#39; def printBoard(board): print(&#39; | |&#39;) print(&#39; &#39; + board[1] + &#39; | &#39; + board[2] + &#39; | &#39; + board[3]) print(&#39; | |&#39;) print(&#39;-----------&#39;) print(&#39; | |&#39;) print(&#39; &#39; + board[4] + &#39; | &#39; + board[5] + &#39; | &#39; + board[6]) print(&#39; | |&#39;) print(&#39;-----------&#39;) print(&#39; | |&#39;) print(&#39; &#39; + board[7] + &#39; | &#39; + board[8] + &#39; | &#39; + board[9]) print(&#39; | |&#39;) def isWinner(bo, le): return (bo[7] == le and bo[8] == le and bo[9] == le) or (bo[4] == le and bo[5] == le and bo[6] == le) or (bo[1] == le and bo[2] == le and bo[3] == le) or (bo[1] == le and bo[4] == le and bo[7] == le) or (bo[2] == le and bo[5] == le and bo[8] == le) or (bo[3] == le and bo[6] == le and bo[9] == le) or (bo[1] == le and bo[5] == le and bo[9] == le) or (bo[3] == le and bo[5] == le and bo[7] == le) def playerMove(): run = True while run: move = input(&#39;Please select a position to place an \&#39;X\&#39; (1-9): &#39;) try: move = int(move) if move > 0 and move < 10: if spaceIsFree(move): run = False insertLetter(&#39;X&#39;, move) else: print(&#39;Sorry, this space is occupied!&#39;) else: print(&#39;Please type a number within the range!&#39;) except: print(&#39;Please type a number!&#39;) def computerMove(): possibleMoves = [x for x, letter in enumerate(board) if letter == &#39; &#39; and x != 0] move = 0 for let in [&#39;O&#39;, &#39;X&#39;]: for i in possibleMoves: boardCopy = board[:] boardCopy[i] = let if isWinner(boardCopy, let): move = i return move cornersOpen = [] for i in possibleMoves: if i in [1,3,7,9]: cornersOpen.append(i) if len(cornersOpen) > 0: move = selectRandom(cornersOpen) return move if 5 in possibleMoves: move = 5 return move edgesOpen = [] for i in possibleMoves: if i in [2,4,6,8]: edgesOpen.append(i) if len(edgesOpen) > 0: move = selectRandom(edgesOpen) return move def selectRandom(li): import random ln = len(li) r = random.randrange(0,ln) return li[r] def isBoardFull(board): if board.count(&#39; &#39;) > 1: return False else: return True def main(): print(&#39;Welcome to Tic Tac Toe!&#39;) printBoard(board) while not(isBoardFull(board)): if not(isWinner(board, &#39;O&#39;)): playerMove() printBoard(board) else: print(&#39;Sorry, O\&#39;s won this time!&#39;) break if not(isWinner(board, &#39;X&#39;)): move = computerMove() if move == 0: print(&#39;Tie Game!&#39;) else: insertLetter(&#39;O&#39;, move) print(&#39;Computer placed an \&#39;O\&#39; in position&#39;, move , &#39;:&#39;) printBoard(board) else: print(&#39;X\&#39;s won this time! Good Job!&#39;) break if isBoardFull(board): print(&#39;Tie Game!&#39;) main() ``` 这段代码实现了一个简单的井字游戏,其 X 代表玩家,O 代表电脑。现在我们逐行来解释这段代码的功能。 首先,我们创建一个包含10个空格的列表,表示游戏板的状态。 ```python board = [&#39; &#39; for x in range(10)] ``` 接着,我们定义了三个函数:insertLetter,spaceIsFree和printBoard。 ```python def insertLetter(letter, pos): board[pos] = letter def spaceIsFree(pos): return board[pos] == &#39; &#39; def printBoard(board): print(&#39; | |&#39;) print(&#39; &#39; + board[1] + &#39; | &#39; + board[2] + &#39; | &#39; + board[3]) print(&#39; | |&#39;) print(&#39;-----------&#39;) print(&#39; | |&#39;) print(&#39; &#39; + board[4] + &#39; | &#39; + board[5] + &#39; | &#39; + board[6]) print(&#39; | |&#39;) print(&#39;-----------&#39;) print(&#39; | |&#39;) print(&#39; &#39; + board[7] + &#39; | &#39; + board[8] + &#39; | &#39; + board[9]) print(&#39; | |&#39;) ``` insertLetter函数用于将X或O插入到给定位置,spaceIsFree函数用于检查给定位置是否为空,printBoard函数用于显示游戏板的当前状态。 接着,我们定义了两个函数isWinner和playerMove。 ```python def isWinner(bo, le): return (bo[7] == le and bo[8] == le and bo[9] == le) or (bo[4] == le and bo[5] == le and bo[6] == le) or (bo[1] == le and bo[2] == le and bo[3] == le) or (bo[1] == le and bo[4] == le and bo[7] == le) or (bo[2] == le and bo[5] == le and bo[8] == le) or (bo[3] == le and bo[6] == le and bo[9] == le) or (bo[1] == le and bo[5] == le and bo[9] == le) or (bo[3] == le and bo[5] == le and bo[7] == le) def playerMove(): run = True while run: move = input(&#39;Please select a position to place an \&#39;X\&#39; (1-9): &#39;) try: move = int(move) if move > 0 and move < 10: if spaceIsFree(move): run = False insertLetter(&#39;X&#39;, move) else: print(&#39;Sorry, this space is occupied!&#39;) else: print(&#39;Please type a number within the range!&#39;) except: print(&#39;Please type a number!&#39;) ``` isWinner函数用于检查给定的玩家是否是胜者,playerMove函数用于获取玩家的输入并将X插入到给定位置。 接着,我们定义了一个名为computerMove的函数,该函数模拟电脑的移动。该函数首先找到所有空格位置,然后按照优先级查找可以获胜的位置、角落位置、心位置和边缘位置。 ```python def computerMove(): possibleMoves = [x for x, letter in enumerate(board) if letter == &#39; &#39; and x != 0] move = 0 for let in [&#39;O&#39;, &#39;X&#39;]: for i in possibleMoves: boardCopy = board[:] boardCopy[i] = let if isWinner(boardCopy, let): move = i return move cornersOpen = [] for i in possibleMoves: if i in [1,3,7,9]: cornersOpen.append(i) if len(cornersOpen) > 0: move = selectRandom(cornersOpen) return move if 5 in possibleMoves: move = 5 return move edgesOpen = [] for i in possibleMoves: if i in [2,4,6,8]: edgesOpen.append(i) if len(edgesOpen) > 0: move = selectRandom(edgesOpen) return move ``` 我们还定义了一个名为selectRandom的辅助函数,该函数从给定列表随机选择一个元素。 ```python def selectRandom(li): import random ln = len(li) r = random.randrange(0,ln) return li[r] ``` 接着,我们定义了isBoardFull函数用于检查游戏板是否已满。 ```python def isBoardFull(board): if board.count(&#39; &#39;) > 1: return False else: return True ``` 最后,我们定义了一个名为main的函数,用于执行游戏的主要逻辑。该函数首先显示欢迎信息和初始游戏板状态,然后重复执行以下操作,直到游戏板已满: - 如果电脑没有获胜,则玩家进行移动,并显示更新后的游戏板。 - 如果玩家没有获胜,则电脑进行移动,并显示更新后的游戏板。 - 如果玩家或电脑获胜,则停止游戏并显示获胜者。 如果游戏板已满并且没有获胜者,则停止游戏并显示平局。 ```python def main(): print(&#39;Welcome to Tic Tac Toe!&#39;) printBoard(board) while not(isBoardFull(board)): if not(isWinner(board, &#39;O&#39;)): playerMove() printBoard(board) else: print(&#39;Sorry, O\&#39;s won this time!&#39;) break if not(isWinner(board, &#39;X&#39;)): move = computerMove() if move == 0: print(&#39;Tie Game!&#39;) else: insertLetter(&#39;O&#39;, move) print(&#39;Computer placed an \&#39;O\&#39; in position&#39;, move , &#39;:&#39;) printBoard(board) else: print(&#39;X\&#39;s won this time! Good Job!&#39;) break if isBoardFull(board): print(&#39;Tie Game!&#39;) main() ``` 这就是这个井字游戏的Python代码及其详细解释。希望这能帮助您更好地理解Python编程

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值