精华内容
下载资源
问答
  • python 程序员进阶之路:从新手到高手的100个模块

    万次阅读 多人点赞 2019-10-22 09:45:31
    在知乎和CSDN的圈子里,经常看到、听到一些 python 初学者说,学完基础语法后,不知道该学什么,学了也不知道怎么用,一脸的茫然。近日,CSDN的公众号推送了一...》,真实反映了 python 程序员在成长过程中的一些困惑。

    在知乎和CSDN的圈子里,经常看到、听到一些 python 初学者说,学完基础语法后,不知道该学什么,学了也不知道怎么用,一脸的茫然。近日,CSDN的公众号推送了一篇博客,题目叫做《迷思:Python 学到什么程度可以面试工作?》,真实反映了 python 程序员在成长过程中的一些困惑。

    英汉小词典
    pythoneer - 指所有用python语言开发程序的人
    pythonista - 意为资深的、追求质量和品味的python开发者

    我从2007年开始接触 python 这门编程语言,从2009年开始单一使用 python 应对所有的开发工作,直至今天。回顾自己的学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。本文所列举的这100个模块,是我在工作和学习中用过的或者正在学习的,算是对自己过去12年的学习总结。希望对处在迷茫中的程序员有所帮助。

    在这个列表中,我把模块分成11大类:

    1. 基础类
    2. 数据库接口类
    3. 网络通讯类
    4. 音像游戏类
    5. GUI类
    6. web框架类
    7. 科学计算类
    8. 2D/3D类
    9. 数据处理类
    10. 机器学习类
    11. 工具类

    针对每一个模块,根据以往的工作经验,我给出了相应的推荐指数,从1颗星到5颗星。这是一个非常主观的判断,仅供参考。

    1. ★☆☆☆☆:较少被用到
    2. ★★☆☆☆:重要但较少被用到,
    3. ★★★☆☆:解决特定问题不可或缺
    4. ★★★★☆:主流应用,优先学习
    5. ★★★★★:同类模块最优,或学习优先级最高

    从 pythoneer 到 pythonista 的100个模块

    No. 来源 模块 说明 分类 推荐指数
    1 标准库 os 文件和路径操作功能 基础类 ★★★★★
    2 标准库 sys 系统和环境相关功能 基础类 ★★★☆☆
    3 标准库 time 时间库 基础类 ★★★★☆
    4 标准库 datetime 日期处理库 基础类 ★★★★★
    5 第三方库 dateutil datetime模块的扩展 基础类 ★★☆☆☆
    6 标准库 math 数学函数库 基础类 ★★★★☆
    7 标准库 random 随机数库 基础类 ★★★☆☆
    8 标准库 re 正则表达式功能 基础类 ★★★★☆
    9 标准库 queue 队列功能 基础类 ★★★☆☆
    10 标准库 copy 数据复制库 基础类 ★★★☆☆
    11 标准库 threading 线程接口 基础类 ★★★★★
    12 标准库 multiprocessing 基于进程的“线程”接口 基础类 ★★★★★
    13 标准库 configparser ini文件解析器 基础类 ★★☆☆☆
    14 标准库 argparse 命令行选项、参数和子命令解析器 基础类 ★★☆☆☆
    15 标准库 json json库 基础类 ★★★★☆
    16 标准库 base64 Base16/32/64/85数据编码库 基础类 ★★★☆☆
    17 标准库 uuid 通用唯一识别码 基础类 ★★★☆☆
    18 标准库 hashlib md5, sha等hash算法库 基础类 ★★★★☆
    19 标准库 glob 文件和路径查找功能 基础类 ★☆☆☆☆
    20 标准库 shutil 对文件与文件夹各种常见操作 基础类 ★★★☆☆
    21 标准库 zipfile 创建读写添加及列出ZIP文件的工具 基础类 ★★☆☆☆
    22 标准库 tartfile 创建读写添加及列出TAR文件的工具 基础类 ★★☆☆☆
    23 标准库 gc 垃圾回收库 基础类 ★★☆☆☆
    24 标准库 logging 日志功能 基础类 ★★★★☆
    25 标准库 ctypes 用来调用C代码的外来函数接口 基础类 ★★★☆☆
    26 标准库 struct 将字节串解读为打包的二进制数据 基础类 ★★☆☆☆
    27 标准库 unittest 单元测试框架 基础类 ★★☆☆☆
    28 第三方库 xlrd 读Excel文件的数据和格式信息 基础类 ★★★★☆
    29 第三方库 xlwt 写Excel文件的数据和格式信息 基础类 ★★★★☆
    30 第三方库 freetype 字体文件读取库 基础类 ★★☆☆☆
    31 第三方库 APScheduler 进程内任务调度 基础类 ★★★☆☆
    32 第三方库 watchdog 管理文件系统事件的API和shell工具 基础类 ★★★☆☆
    33 标准库 sqlite3 文件型数据库驱动 数据库接口类 ★★★★★
    34 标准库 PyMySQL MySQL数据库的连接库 数据库接口类 ★★★★☆
    35 标准库 cx_oracle oracle数据库的连接库 数据库接口类 ★★★★☆
    36 标准库 pymongo mongodb数据库的连接库 数据库接口类 ★★★☆☆
    37 标准库 redis redis数据库的连接库 数据库接口类 ★★☆☆☆
    38 标准库 pyodbc 数据库通用接口标准连接库 数据库接口类 ★★☆☆☆
    39 标准库 socket socket通讯库 网络通讯类 ★★★★☆
    40 标准库 socketserver socket服务器 网络通讯类 ★★★☆☆
    41 标准库 xmlrpc xmlrpc服务器 网络通讯类 ★★★☆☆
    42 标准库 ftplib FTP服务连接库 网络通讯类 ★★★☆☆
    43 标准库 smtplib 邮件发送库 网络通讯类 ★☆☆☆☆
    44 标准库 email 邮件库 网络通讯类 ★☆☆☆☆
    45 标准库 urllib 网络请求库 网络通讯类 ★★★★☆
    46 第三方库 pyserial 串口通讯库 网络通讯类 ★★☆☆☆
    47 第三方库 paramiko SSH2远程安装连接库 网络通讯类 ★★☆☆☆
    48 第三方库 pycurl 多协议文件传输库 网络通讯类 ★★★★★
    49 第三方库 requests http请求的模块 网络通讯类 ★★★★☆
    50 标准库 asyncio 异步I/O、事件循环、协程以及任务 网络通讯类 ★★☆☆☆
    51 第三方库 twisted 基于事件驱动的网络引擎框架 网络通讯类 ★★☆☆☆
    52 第三方库 dispy 分布式并行计算框架 网络通讯类 ★★☆☆☆
    53 第三方库 pp 支持SMP和集群方式的并行计算框架 网络通讯类 ★★☆☆☆
    54 第三方库 pillow 图像处理库 音像游戏类 ★★★★★
    55 第三方库 opencv 计算机视觉库 音像游戏类 ★★★★★
    56 第三方库 imageio GIF、AVI文件生成 音像游戏类 ★★☆☆☆
    57 第三方库 pygame python游戏开发模块 音像游戏类 ★★★★☆
    58 第三方库 pyaudio 跨平台的音频I/O库 音像游戏类 ★★★☆☆
    59 标准库 winsound windows平台基本声音播放库 音像游戏类 ★★☆☆☆
    60 第三方库 wxpython GUI图形库 GUI类 ★★★★★
    61 第三方库 pyqt GUI图形库 GUI类 ★★★★☆
    62 标准库 tkinter GUI图形库 GUI类 ★☆☆☆☆
    63 第三方库 cefpython3 将浏览器嵌入到GUI中 GUI类 ★☆☆☆☆
    64 第三方库 pywin32 针对Windows的Python扩展 GUI类 ★★★☆☆
    65 第三方库 tornado 非阻塞式Web服务器框架 web框架类 ★★★★★
    66 第三方库 django 重量级Web服务器框架 web框架类 ★★★★☆
    67 第三方库 flask 轻量级Web服务器框架 web框架类 ★★★☆☆
    68 第三方库 numpy 科学计算的基础软件包 科学计算类 ★★★★★
    69 第三方库 scipy 科学计算常用软件包 科学计算类 ★★★★☆
    70 第三方库 sympy 科学计算库 科学计算类 ★★★☆☆
    71 第三方库 eigen 矩阵运算库 科学计算类 ★★☆☆☆
    72 第三方库 pyopengl opengl的python接口 2D/3D类 ★★★★★
    73 第三方库 vispy 交互式科学可视化的Python库 2D/3D类 ★★★☆☆
    74 第三方库 vtk 三维计算机图形学、图像处理和可视化 2D/3D类 ★★★☆☆
    75 第三方库 mayavi 基于VTK的3D绘图库 2D/3D类 ★★★☆☆
    76 第三方库 matplotlib 2D绘图库 2D/3D类 ★★★★★
    77 第三方库 basemap matplotlib的地图库 2D/3D类 ★★★☆☆
    78 第三方库 pyproj 地理投影坐标转换库 2D/3D类 ★★☆☆☆
    79 第三方库 bokeh 针对浏览器的交互式可视化库 2D/3D类 ★★★★☆
    80 第三方库 pyecharts 生成 Echarts 图表的类库 2D/3D类 ★★★☆☆
    81 第三方库 h5py HDF文件读写库 数据处理类 ★★★☆☆
    82 第三方库 netcdf4 NC文件读写库 数据处理类 ★★★☆☆
    83 第三方库 pyshp shape文件解析 数据处理类 ★★☆☆☆
    84 第三方库 xmltodict xml转换成json 数据处理类 ★★★☆☆
    85 标准库 xml xml解析库 数据处理类 ★☆☆☆☆
    86 第三方库 lxml xml和html的解析库,支持XPath 数据处理类 ★★★★☆
    87 第三方库 BeautifulSoup xml和html的解析库 数据处理类 ★★★★☆
    88 第三方库 scrapy 网络爬虫库 数据处理类 ★★★★☆
    89 第三方库 pandas 数据分析工具包 数据处理类 ★★★★☆
    90 第三方库 scikit-learn 机器学习工具包 机器学习类 ★★★★★
    91 第三方库 milk 机器学习工具包 机器学习类 ★★★☆☆
    92 第三方库 tensorflow 深度学习框架 机器学习类 ★★★★☆
    93 第三方库 keras 深度学习框架 机器学习类 ★★★☆☆
    94 第三方库 nltk 自然语言处理工具包 机器学习类 ★★★☆☆
    95 第三方库 pip 包和依赖关系管理工具 工具类 ★★★★★
    96 第三方库 setuptools 包和依赖关系管理工具 工具类 ★★★☆☆
    97 第三方库 whell whl文件打包工具 工具类 ★☆☆☆☆
    98 第三方库 py2exe python脚本打包工具 工具类 ★★☆☆☆
    99 第三方库 cx_freeze python脚本打包工具 工具类 ★★★★☆
    100 第三方库 pyinstaller python脚本打包工具 工具类 ★★★★★

    后记

    近期有很多朋友通过私信咨询有关Python学习问题。为便于交流,我在CSDN的app上创建了“Python作业辅导”大本营,面向Python初学者,为大家提供咨询服务、辅导Python作业。欢迎有兴趣的同学使用微信扫码加入。

    在这里插入图片描述

    从博客到公众号,每一篇、每一题、每一句、每一行代码,都坚持原创,绝不复制抄袭,这是我坚守的原则。如果喜欢,请关注我的微信公众号“Python作业辅导员”。

    在这里插入图片描述

    展开全文
  • 硅谷程序员进阶之路

    2018-06-17 14:17:32
    硅谷程序员进阶之路,囊括程序员面试内容,包括操作系统、计算机网络、组成原理以及算法。
  • 程序员进阶之路

    2019-02-02 10:22:00
    程序员进阶路上不能错过的史上最全技术知识图谱秘籍 今天在技术大海中游啊游游啊游,哇啊哈哈 ^_^发现了一份非常有用的超级技术图谱诶! 强烈推荐啊!!本文原作者是易宝支付技术经理/架构师李艳鹏,这是鹏哥...

    程序员进阶路上不能错过的史上最全技术知识图谱秘籍

     

    今天在技术大海中游啊游游啊游,哇啊哈哈 ^_^发现了一份非常有用的超级技术图谱诶! 强烈推荐啊!!本文原作者是易宝支付技术经理/架构师李艳鹏,这是鹏哥多年来积累和收集的技术知识技能图谱,有的是鹏哥原创总结的最佳实践,有的是小伙伴们的分享。

     

    其实,每个秘籍图谱里面的内容都是互联网高并发架构师应该了解和掌握的知识。鹏哥索性就把这些图谱都收集在一起,并且进行了归类,便于大家查找和学习。图谱也暗含着他的一个小目标:想把更多的技术图谱和思维导图汇集在一起,成为互联网上“最全的技术图谱”。

     

    这份技术知识图谱秘籍真的很棒,iG客吧极力推荐分享给身边的技术人儿。真心希望这份技术知识图谱能够帮助到每一位奋斗在技术路上的小伙伴~~~^_^ 大家一起加油哇!~

     


     

    1.1架构师图谱

     

    1.2 Java架构师图谱

     

    1.3 微服务架构秘籍

     

    1.4 一致性图谱

     

    1.5 互联网大流量的方法

     

    1.6 安全秘籍

     

    1.7 阿里巴巴常用小框架

     

     

    1.8 架构方法论图谱

     

    1.9 设计模式秘籍图谱

     


     

    2.1 JVM垃圾回图谱

     

    2.2 Java并发图谱

     

    2.3 Java集合图谱

     

    2.4 Java集合类图

     

    2.5 Java List类图

     

    2.6 Java Map类图

     

    2.7 Java Set类图

     


     

    3.1 Hadoop技能图谱

     

    3.2 大数据技能图谱

     

     


     

    4.1 云计算图谱

     

    4.2 云计算技能图谱

     


     

    5.1 iOS技能图谱

     

    5.2 OpenResty技能图谱

     

    5.3 前端技能图谱

     

    5.4 容器技能图谱

     

    5.5 嵌入式开发技能图谱

     

    5.6 开发语言宝典

     

    5.7 移动端测试图谱

     

    5.8 运维技能图

    欢迎访问GBin1.com

    转载于:https://www.cnblogs.com/studynode/p/10347727.html

    展开全文
  • 程序员进阶之路之面试题与笔试题集锦(二) 其一参考: 程序员进阶之路之面试题与笔试题集锦(一)

    程序员进阶之路之面试题与笔试题集锦(二)
    其一参考:
    程序员进阶之路之面试题与笔试题集锦(一)

    ####二分查找
    在二分查找算法中,数列已经排好序,对于要搜索的数字,我们从中间的数开始搜索,如果目标数小于中间数,则无需搜索右边的数,因为右边的数都大于中间的数,直接搜索左边的数就可以;如果目标数大于中间数,则无需搜索左边的数,因为左边的数都是小于中间数,直接搜索右边的数

    例:对于一个有序数组,我们通常采用二分查找的方式来定位某一元素,请编写二分查找的算法,在数组中查找指定元素。
    给定一个整数数组A及它的大小n,同时给定要查找的元素val,请返回它在数组中的位置(从0开始),若不存在该元素,返回-1。若该元素出现多次,请返回第一次出现的位置。

    # -*- coding:utf-8 -*-
    
    class BinarySearch:
        def getPos(self, A, n, val):
            # write code here
                    a=list(A)
                    a.sort()
                    left=0
                    right=n-1
                    while left<=right:
                        mid=(left+right)//2
                        if val<a[mid]:
                            right=mid-1
                        elif  val>a[mid]:
                            left=mid+1
                        else:
                            return A.index(val)
                    return -1
    

    测试:

    A=[1,3,5,7,9,10]
    
    BinarySearch().getPos(A, len(A), 6)
    
    微信号
    展开全文
  • 游戏程序员进阶之路 一些优秀书籍文档介绍
  • 1. 引言 搞Java 的弟兄们肯定都想要达到更高的境界用更少的代码解决更多的问题用更清晰的 结构为可能的传承和维护做准备想想当初自己摸着石头过河也看过不少人介绍的学习 线十多年走过来多少还是有些收获现通过...
  • 程序员进阶之路----三子棋 三子棋是大家小时候都玩过的游戏,它就是一方连成一条线,就可以赢。 首先写三子棋分为: 头文件:game.h //包含函数各种声明,宏定义 源文件:main.c //主要负责测试整个代码 源文件:...

    程序员进阶之路----三子棋

    三子棋是大家小时候都玩过的游戏,它就是一方连成一条线,就可以赢。
    首先写三子棋分为:
    头文件:game.h //包含函数各种声明,宏定义
    源文件:test.c //主要负责测试整个代码
    源文件:game.c //包含各种函数的定义
    整体思路
    玩家使用“*”,电脑使用“#”,用“C”判断输赢。

    1. 玩游戏开始之前,我们要有一个菜单来输出信息
    void menu()
    {
    	printf("***********************************************\n"); 
    	printf("*******     1.play         0.exit        ******\n");
    	printf("***********************************************\n");
    }
    

    2.然后我们需要使用二维数组构造一个棋盘,在初始化棋盘
    构造棋盘

    char board[ROW][COL] = { 0 };
    	char ret = 0;
    

    并且使用宏定义棋盘,因为只用这样方便更改棋盘大小

    #define ROW 3//使用宏定义,方便修改棋盘大小
    #define COL 3
    

    初始化棋盘,定义InitBoard函数来实现

    void InitBoard(char board[ROW][COL], int row, int col)//初始化棋盘
    {
    	int i = 0;
    	int j = 0;
    	for (i = 0; i < row; i++)
    	{
    		for (j = 0; j < col; j++)
    		{
    			board[i][j] = ' ';
    		}
    	}
    }
    

    3.我们需要把棋盘打印出来,这样更加清晰看出玩游戏时的走向。定义DisplayBoard来实现。

    void DisplayBoard(char board[ROW][COL], int row, int col)//打印棋盘
    {
    	int i = 0;
    	for (i = 0; i < row; i++)
    	{
    		int j = 0;
    		for (j = 0; j < col; j++)
    		{
    			printf(" %c ", board[i][j]);
    			if (j < col - 1)
    				printf("|");
    		}
    		printf("\n");
    		if (i < row - 1)
    		{
    			for (j = 0; j < col; j++)
    			{
    				printf("---");
    				if (j < col - 1)
    					printf("|");
    			}
    			printf("\n");
    		}
    	}
    }
    

    4.把棋盘打印出来之后,我们需要输入坐标,来确定你要走的位置,用函数PlayerMove来定义

    void PlayerMove(char board[ROW][COL], int row, int col)//玩家走
    {
    	int x = 0;
    	int y = 0;
    	printf("玩家走:>\n");
    	while (1)
    	{
    		printf("请输入坐标:>\n");
    		scanf("%d,%d", &x, &y);
    		if (x > 0 && x <= row && y > 0 && y <= col)
    		{
    			if (board[x - 1][y - 1] == ' ')
    			{
    				board[x - 1][y - 1] = '*';
    				break;
    			}
    			else
    			{
    				printf("该坐标已被占用,请重新输入!\n");
    			}
    		}
    		else
    		{
    			printf("该坐标非法,请重新输入!\n");
    		}
    
    	}
    }
    

    5.玩家走完之后,就到电脑走了。电脑需要随机输入坐标,并且输入坐标在0~9之间。
    这个需要调用头文件#include <time.h>,生成随机数。用函数ComputerMove来定义。

    void ComputerMove(char board[ROW][COL], int row, int col)//电脑走
    {
    	printf("电脑走:>\n");
    	while (1)
    	{
    		int x = rand() % row;//随机输出坐标
    		int y = rand() % col;
    		if (board[x][y] == ' ')
    		{
    			board[x][y] = '#';
    			break;
    		}
    	}
    }
    

    6.电脑走完之后,我们就需要判断输赢。“*”代表玩家赢,“#”代表电脑赢,“Q”代表平局。WinCheck函数通过检测每行,每列,和两个对角线的所有字符是否为三个相同的字符,如果是就返回那三个相同的字符。

    char WinCheck(char board[ROW][COL], int row, int col)//判断输赢
    {
    	{
    		int i = 0;
    		for (i = 0; i < row; i++)
    		{
    			if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0] != ' ')//判断行
    			{
    				return board[i][0];
    			}
    		}
    		for (i = 0; i < col; i++)
    		{
    			if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[0][i] != ' ')//判断列
    			{
    				return board[0][i];
    			}
    		}
    		//判断对角线
    		if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ')
    		{
    			return board[1][1];
    		}
    		if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ')
    		{
    			return board[1][1];
    		}
    		if (IsFull(board, ROW, COL) )
    		{
    			return 'Q';
    		}
    		return 'C';
    	}
    }
    

    还有一个函数是在WinCheck里面调用的IsFull,

    int IsFull(char board[ROW][COL], int row, int col)
    {
    	int i = 0;
    	int j = 0;
    	for (i = 0; i <= row; i++)
    	{
    		for (j = 0; j <= col; j++)
    		{
    			if (board[i][j] == ' ')
    				return 0;
    		}
    	}
    	return 1;
    }
    

    这就是三子棋的总体思路,虽然代码看起来很长,但是只要我们能够正确理解它的思路,那么实现起来也没有多大难处。
    源代码
    头文件:game.h

    #define _CRT_SECURE_NO_WARNINGS 1//预处理器定义
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <time.h>//调用头文件,生成随机数
    
    #define ROW 3//使用宏定义,方便修改棋盘大小
    #define COL 3
    void InitBoard(char board[ROW][COL], int row, int col);
    void DisplayBoard(char board[ROW][COL], int row, int col);
    void PlayerMove(char board[ROW][COL], int row, int col); 
    void ComputerMove(char board[ROW][COL], int row, int col);
    char WinCheck(char board[ROW][COL], int row, int col);
    
    

    源文件:test.c

    # include <stdlib.h>
    # include "game.h"# define _CRT_SECURE_NO_WARNINGS 1
    # include <stdio.h>
    
    
    
    void menu()
    {
    	printf("***********************************************\n"); 
    	printf("*******     1.play         0.exit        ******\n");
    	printf("***********************************************\n");
    }
    void game()
    {
    	char board[ROW][COL] = { 0 };
    	char ret = 0;
    	InitBoard(board, ROW, COL);//初始化数组
    	DisplayBoard(board, ROW, COL);//打印棋盘
    	while (1)//玩游戏
    	{
    		PlayerMove(board, ROW, COL);//玩家走
    		DisplayBoard(board, ROW, COL);
    		ret = WinCheck(board, ROW, COL);
    		if (ret != 'C')//判断输赢
    			break;
    		ComputerMove(board, ROW, COL);
    		DisplayBoard(board, ROW, COL);
    		ret = WinCheck(board, ROW, COL);
    		if (ret != 'C')//判断输赢
    			break;
    	}
    		if (ret == '*')
    		{
    			printf("恭喜你,你赢了!\n");
    		}
    		else if (ret == '#')
    		{
    			printf("电脑赢!\n");
    		}
    		else if (ret == 'Q')
    		{
    			printf("平局!\n");
    		}
    	}
    
    void test()
    	{
    		int input = 0;
    		srand((unsigned int)(time(NULL)));//生成随机数
    		do
    		{
    			menu();
    			printf("请选择:>");
    			scanf("%d", &input);
    			switch (input)
    			{
    			case 1:
    				game();
    			case 0:
    				printf("退出游戏\n");
    			default:
    				printf("选择错误,请重新选择\n");
    				break;
    			}
    		} while (input);
    	}
    
    
    	int main()
    {
    	test();
    	system("pause");
    	return 0;
    }
    
    源文件:game.c
    
    # define _CRT_SECURE_NO_WARNINGS 1
    #include "game.h"
    void InitBoard(char board[ROW][COL], int row, int col)
    {
    	int i = 0;
    	int j = 0;
    	for (i = 0; i < row; i++)
    	{
    		for (j = 0; j < col; j++)
    		{
    			board[i][j] = ' ';
    		}
    	}
    }
    void DisplayBoard(char board[ROW][COL], int row, int col)
    {
    	int i = 0;
    	for (i = 0; i < row; i++)
    	{
    		int j = 0;
    		for (j = 0; j < col; j++)
    		{
    			printf(" %c ", board[i][j]);
    			if (j < col - 1)
    				printf("|");
    		}
    		printf("\n");
    		if (i < row - 1)
    		{
    			for (j = 0; j < col; j++)
    			{
    				printf("---");
    				if (j < col - 1)
    					printf("|");
    			}
    			printf("\n");
    		}
    	}
    }
    void PlayerMove(char board[ROW][COL], int row, int col)
    {
    	int x = 0;
    	int y = 0;
    	printf("玩家走:>\n");
    	while (1)
    	{
    		printf("请输入坐标:>\n");
    		scanf("%d,%d", &x, &y);
    		if (x > 0 && x <= row && y > 0 && y <= col)
    		{
    			if (board[x - 1][y - 1] == ' ')
    			{
    				board[x - 1][y - 1] = '*';
    				break;
    			}
    			else
    			{
    				printf("该坐标已被占用,请重新输入!\n");
    			}
    		}
    		else
    		{
    			printf("该坐标非法,请重新输入!\n");
    		}
    
    	}
    }
    void ComputerMove(char board[ROW][COL], int row, int col)
    {
    	printf("电脑走:>\n");
    	while (1)
    	{
    		int x = rand() % row;//随机输出坐标
    		int y = rand() % col;
    		if (board[x][y] == ' ')
    		{
    			board[x][y] = '#';
    			break;
    		}
    	}
    }
    int IsFull(char board[ROW][COL], int row, int col)
    {
    	int i = 0;
    	int j = 0;
    	for (i = 0; i <= row; i++)
    	{
    		for (j = 0; j <= col; j++)
    		{
    			if (board[i][j] == ' ')
    				return 0;
    		}
    	}
    	return 1;
    }
    char WinCheck(char board[ROW][COL], int row, int col)
    {
    	{
    		int i = 0;
    		for (i = 0; i < row; i++)
    		{
    			if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0] != ' ')//判断行
    			{
    				return board[i][0];
    			}
    		}
    		for (i = 0; i < col; i++)
    		{
    			if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[0][i] != ' ')//判断列
    			{
    				return board[0][i];
    			}
    		}
    		//判断对角线
    		if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ')
    		{
    			return board[1][1];
    		}
    		if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ')
    		{
    			return board[1][1];
    		}
    		if (IsFull(board, ROW, COL) )
    		{
    			return 'Q';
    		}
    		return 'C';
    	}
    }
    
    
    展开全文
  • java程序员进阶之路

    2018-10-17 20:07:00
    本文作者为优知学院创始人陈睿(mike),作者有10年以上技术&产品经验,曾任百度研发经理、携程定制旅游CTO。 优知学院,首家互联网技术结合产品学习社区。...如果你想全面晋升,求职BAT、薪资翻倍、技术进阶...
  • PHP程序员进阶之路

    2019-03-05 11:10:48
    Web ServiceRESTFUL,SOAP,RPC。 18.ThinkPHP框架 路由,控制器,模型,表单验证,配置,扩展,缓存,模板等。 19.开发TP版代码生成器 生成配置文件,生成控制器,生成模型,生成页面,生成表单验证,...
  • 程序员进阶之路 上图是完整的程序员屌丝逆袭之路。 市面上,大部分人对程序员有很多误解。喜欢给机器打交道、情商低、不善于沟通...总之,你要说理由,我还可以补充99个。 其实,你说他说错了么,我觉得没错啊...
  • 程序员进阶之路

    2020-07-26 19:36:54
    第4章介绍的是程序员的自我成长方面的内容,对自己参考意义比较重要。现对文中重要的观点摘录如下: 我就是唯一 强调自我认知的重要性,要坚信想象可以变为现实,相信自己坚持的事情可以成功。 要有规划性 要制定...
  • Java程序员进阶之路

    2018-05-07 10:21:22
  • 我的程序员进阶之路

    2019-05-23 12:00:00
    点击上方“Python爬虫与数据挖掘”,进行关注回复“书籍”即可获赠Python从入门到进阶共10本电子书今日鸡汤草树知春不久归,百般红紫斗芳菲。2012年的时候,我参与...
  • 用于问题收集
  • 我觉得不管做什么行业,都需要不断地学习,尤其是程序员。平时我偶尔会去查询和思考程序员的学习路线,结合自己的实践经验,我将我自己认为的一个C++程序员的学习路线整理成了本篇文章。书中提到的书籍我基本都收藏...
  • 今天和大家分享一下,程序员如何独当一面这个话题,这是一个很大的话题,我把他分成三部分来谈: 一、需求转换的能力或者叫理解需求的能力; 二、分配时间的能力; 三、开发质量的问题; 我为什么把时间分配...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,266
精华内容 506
关键字:

程序员进阶之路