千锋教育

Java培训丨Python培训丨IT培训机构

原创 用Python玩跳一跳小游戏,我能开挂

对很多人来说,可能是已经过时的游戏,对于Python刚入门来说,却是一个非常值得学习的项目。我们收集了很多有关python入门的项目案例,包含了相应的教程和源码,哪怕你从未接触编程,也通过这些教程,完成相应的python小项目,并在实战中,收获python的基础知识点。给大家简单讲一下如何用python玩跳一跳小游戏Python跳一跳小游戏,这是一款插画风格的小游戏,非常益智。跟前年的跳一跳小游戏一样,也是通过按压屏幕的时间长短,从而控制这个小角色的跳跃距离。在刚刚开始玩..

2020-07-31 15:57:05 330

原创 Java教程:PC人脸识别登录,竟然出乎意料的简单

最近对写文章稍稍的有点小抵触,写的东西没人看,有点小失落,还好在粉丝朋友的开导下,调整了下自己的心态,只要我分享的东西对大家有帮助就好,至于多少人看那就随缘吧!有时候真不能把事儿自己钻里面想,越想越出不来!你们也要开开心心的哈!话不多说先看人脸识别效果动态,马赛克有点重哈,没办法长相实在是拿不出手。实现原理我们看一下实现人脸识别登录的大致流程,三个主要步骤:前端登录页打开摄像头,进行人脸识别,注意:只识别画面中是不是有人脸 识别到人脸后,拍照上传当前画面图片 后端接受..

2020-07-31 15:52:05 327

原创 Python快速入门,附详细视频教程

无论是哪种编程语言,最开始往往是最难的,那么今天,我就来谈谈如何才能快速入门python编程。设定目标如果你学python是想找工作的话,可以先看看对于python程序员的相关招聘要求,比如这是我在某网找到的一个有关初级Python程序员的招聘要求,可以看看:熟悉 Python 及常用的 Web 开发框架;至少熟悉一种数据库的使用,如MySQL、mongodb、redis等;熟悉 Linux 操作系统及常用命令;良好的编码习惯和文档编写习惯;对于程序员来说,除了需要会p.

2020-07-31 15:35:50 410 4

转载 如何用c语言和GTK写一个扔色子的程序?

今来写一个简单版本的扔色子的程序。如果只用C语言来写,就随机数就可以了,现在加上了图形界面,代码如下:#include <gtk/gtk.h>#include <time.h>static GtkWidget *ourgif;gint i = 0;int flag=0;void change_bmp(){ srand(time(NULL)); i = rand() % 6; //取值范围是0~5 if(flag==0){ g_print("flag=

2020-07-31 09:37:49 357 1

转载 gtk当中一些好玩的小例子

之前有人问我,为什么要学习gtk?原因很简单:首先,GTK是C语言实现的。我们需要明白,对于C程序员而言,大部分都没有接触过图形界面编程,但是对于以后的发展,我们很有必要了解一下图形界面编程。那么问题又来了,我们是学C语言的,我们可能不太乐意学习面向对象语言(如 C++, Java, C#, Objective-C 等),现在市场上流行的图形界面工具库基本上都是用面向对象语言开发的。再者,对于我们 C 程序员,我们可能只需了解一下图形界面开发过程,并不一定以后从事图形界面开发。所以,GTK是一个很

2020-07-31 09:37:37 339 1

转载 详解c++中字符指针数组的使用

指针数组,就指向指针的指针,很早以前在说指针的时候说过,但后来发现很多人还是比较难以理解,这一次我们再次仔细说一说指向指针的指针。先看下面的代码,注意看代码中的注解:#include <iostream> #include <string> using namespace std; void print_char(char* array[],int len);//函数原形声明 void main(void) { //---------

2020-07-31 09:37:28 313 1

转载 虚拟机无法上网之修改Ubuntu更新源

大家虚拟机安装ubuntu系统后,有些会出现无法上网问题,如果是连接不到网络,可以参考下篇文章。VM虚拟机不能上网的问题解决_运维_Aaron_Zhang939的博客-CSDN博客​blog.csdn.net还有一种情况是连接超时问题,这种情况一般是修改Ubuntu更新源就能解决。一般直接百度Ubuntu更新源就能出来一大堆,这时候最好是找和自己Ubuntu版本一致的更新源,我的Ubuntu版本是16.04,下面是我找到的一个比较好的更新源,并附上更换步骤:下面是更换步骤:1 备份原来的

2020-07-31 09:37:20 303 1

转载 线程间同步互斥(4)信号量使用

接下来。来看一看信号量的使用。概念部分:信号量广泛用于进程或线程间的同步和互斥,信号量本质上是一个非负的整数计数器,它被用来控制对公共资源的访问。编程时可根据操作信号量值的结果判断是否对公共资源具有访问的权限,当信号量值大于 0 时,则可以访问,否则将阻塞。PV 原语是对信号量的操作,一次 P 操作使信号量减1,一次 V 操作使信号量加1。函数接口部分:#include <semaphore.h>// 初始化信号量int sem_init(sem_t *sem, int

2020-07-31 09:37:12 317 1

原创 从零开始学Python:20课-函数使用进阶

在之前的课程中,我们讲到过关于函数的知识,我们还讲到过Python中常用的数据类型,这些类型的变量都可以作为函数的参数或返回值;通过前几节课的学习,我们又知道了写在类中的函数通常称之为方法,它代表了类或者对象可以接收的消息。如果我们把这些知识汇总一下,我们的函数就可以做更多的事情。关键字参数下面是一个判断传入的三条边长能否构成三角形的函数,在调用函数传入参数时,我们可以指定参数名,也可以不指定参数名,代码如下所示。def can_form_triangle(a, b, c): prin

2020-07-30 16:32:27 371 1

转载 const修饰指针和引用释疑

今天来说说const修饰指针和引用,接下来从三个部分来说:const修饰指针,const修饰引用,const修饰指针的引用.一、const修饰指针const修饰指针又可分为三种情况:const修饰指针本身const修饰指针所指的变量(或对象)const修饰指针本身和指针所指的变量(或对象)1.const修饰指针本身这种情形下,指针本身为常量,不可改变,任何修改指针本身的行为都是非法的.例如:const int a = 1; const int b = 2; int i =

2020-07-30 10:05:48 336 1

转载 文件传输软件WinSCP的使用

WinSCP软件是windows下的一款使用ssh协议的开源图形化SFTP客户端,也就是一个文件传输的软件,它有什么优点吗?咱们嵌入式开发中经常会将windows中的文件复制到linux系统当中,比较常用的方式就是添加共享文件夹,每次通过添加的共享文件夹来相互传输文件,这里介绍的是一款能够跨系统使用的文件传输软件。软件的安装很简单,与其他软件一样直接安装即可,一直下一步就可以,当安装完软件后,打开软件,会看到一下界面此时,它会让你输入一些信息,主机名就是当前linux用户的IP地址,注意

2020-07-30 10:05:39 358 1

转载 纯C语言实现bootloader

之前有用很少一部分汇编实现过bootloader,但经过后来慢慢改进,发现是可以用纯C语言实现嵌入式操作系统的引导。下面是之前对不能完全使用C语言引导系统的几点说明:1、C程序中所有的代码都是以函数的形式出现,而函数定义通常会用到参数和在函数里面定义一堆局部变量,而这些变量一旦过多时,寄存器就无法全部保存,此时就会将剩下的变量存到堆栈里面,即,SP寄存器所指向的内存里面,而此时的SP寄存器并未赋初值,也就没有确切的内存地址可用。所以需要用到堆栈的前提是SP堆栈指针已经有了明确指向,否则就是非法访问内

2020-07-30 10:05:23 359 1

转载 线程间同步互斥(3)条件变量使用

今来看看条件变量的使用!!!与互斥锁不同,条件变量是用来等待而不是用来上锁的。条件变量用来自动阻塞一个线程,直 到某特殊情况发生为止。通常条件变量和互斥锁同时使用。条件变量使我们可以睡眠等待某种条件出现。条件变量是利用线程间共享的全局变量进行同步 的一种机制,主要包括两个动作:一个线程等待"条件变量的条件成立"而挂起另一个线程使 “条件成立”(给出条件成立信号)条件的检测是在互斥锁的保护下进行的。线程在改变条件状态之前必须首先锁住互斥量。如果一个条件为假,一个线程自动阻塞,并释放等待状态改

2020-07-30 10:05:05 338 1

转载 线程间同步互斥(2)读写锁使用

概念:允许多个读出,但只允许一个写入的需求。读写锁与互斥量类似,不过读写锁允许更改的并行性,也叫共享互斥锁。互斥量要么是锁住状态,要么就是不加锁状态,而且一次只有一个线程可以对其加锁。读写锁可以有3种状态:读模式下加锁状态、写模式加锁状态、不加锁状态。读写锁使用步骤:1、定义:pthread_rwlock_t rwlock;2、初始化:3、上锁3.1申请读锁3.2申请写锁4、解锁5、销毁读写锁例子:要实现的功能是验证通过读写锁实现,读线程

2020-07-30 10:04:55 342 1

原创 利用c++实现的贪吃蛇游戏

在tc 3.0下调试通过,因为tc 3.0不支持bool 类型,所以程序中自定义了个枚举类型变量bool  如果在vc或者bc中运行,可以把这个bool类型注释掉.  贪吃蛇的核心算法时如何实现移动和吃掉食物.没有碰到食物的时候,把当前运动方向上的下个节点入队,并以蛇节点的颜色重绘这个节点.  然后把头指针所指的节点出队,并以游戏框架内部背景色重绘出队的节点,这样就可以达到移动的效果.  而在吃到食物的时候,则只需把食物入队即可.// greedsnake.cpp #include &

2020-07-29 10:27:37 491 2

原创 数据结构之队列的顺序存储以及实现

之前咱们已经学习了数据结构的最基本的线性表的顺序存储和链式存储,以及线性表中经常使用的栈的顺序存储和链式存储,今天咱们主要学习的是队列的顺序存储,注意的地方是,队列也是线性表的一种,所以也是一对一的存在,在使用过程中,一定要主要它的特点。接下来,咱们就来看一下主要内容。1. 定义队列是限制在两端进行插入操作和删除操作的线性表,允许进行存入操作的一端称为“队尾”,允许进行删除操作的一端称为“队头”。当线性表中没有元素时,称为“空队”。2. 特点先进先出(FIFO)。3. 队列的定义(1

2020-07-29 10:22:40 373 1

原创 数据结构之栈的链式存储以及实现

对于栈的链式存储,其实咱们之前已经给大家分享过了,其实栈的链式存储和单链表(线性表的链式存储)是一样的,但是栈符合的特性是后进先出,所以需要考虑的是如何实现出栈和入栈。那么通过之前的学习,相信大家应该知道了,其实入栈和出栈就相当于单链表的头插法和头删法,这样实现的话就简单多了,具体代码如下。插入操作和删除操作均在链表头部进行,链表尾部就是栈底,栈顶指针就是头指针。(1)定义栈节点 linkstack_t(2)创建一个空的栈 linkstack_create( )(3)入栈 links

2020-07-29 10:22:29 372 1

原创 Const的几大用法(常用)

今天来看看const的用法。第一:常变量变量用const修饰,其值不得被改变。任何改变此变量的代码都会产生编译错误。Const加在数据类型前后均可。例如:void main(void){ const int i = 10; //i,j都用作常变量 int const j = 20; i = 15; //错误,常变量不能改变 j = 25; //错误,常变量不能改变}第二:常指针const跟指针一起

2020-07-29 10:22:23 351 1

原创 堆和栈的区别(经典版)

一、预备知识—程序的内存分配一个由C/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的

2020-07-29 10:22:09 362 1

原创 什么是真正的空间复杂度?

到底什么才是真正的空间复杂度呢?在空间与时间发生冲突时又该如何权衡呢?本节,我们就来解决这两个问题。来个例子现在有一个算法是这样的,给定一个数组,将数组中每个元素都乘以2返回,我实现了下面两种形式:private static int[] multi1(int[] array) { int[] newArray = new int[array.length]; for (int i = 0; i < array.length; i++) { newAr

2020-07-29 10:18:41 365 2

原创 敲黑板:Linux重定向用法详解

相信大家平时都会有需要复制粘贴数据的时候,如果是打开文件进行复制粘贴,就不可避免的需要较多的鼠标与键盘的操作,就会比较繁琐。那么有没有可以省掉这些繁琐操作的复制粘贴的方法呢?答案是肯定的,那就是重定向。重定向是一种高效的方法,无需大量的鼠标与键盘操作就可以完成数据的转移。重定向可以分为输入重定向以及输出重定向这两种类型。由于所有程序都有输入或者输出,因此输入和输出的重定向是任何编程语言或脚本语言都自带的功能。每当你与计算机交互时,重定向就必然会发生。学会使用重定向,不仅可以让你与计算机更好地交互,还

2020-07-28 17:30:37 329

原创 从零开始学Python:19课-使用PyCharm开发Python应用程序

坚持学习完前18课的小伙伴应该已经感受到了,随着我们对Python语言的认知在逐步加深,我们写的代码也越来越复杂了。“工欲善其事,必先利其器”,如果希望能够更快更好的写出代码,选择一个称手的开发工具是很有必要的。虽然我们之前推荐大家使用的VS Code已经很好了,但是对于复杂应用程序或者商业项目开发来说,我们还有更好的选择,它就是JetBrains公司出品的PyCharm。PyCharm的下载和安装可以在JetBrains公司的官方网站找到PyCharm的下载链接,有两个可供下载的版本,一个是社区版

2020-07-28 16:52:43 355 1

原创 从零学Python:18-面向对象编程应用

面向对象编程对初学者来说不难理解但很难应用,虽然我们为大家总结过面向对象的三步走方法(定义类、创建对象、给对象发消息),但是说起来容易做起来难。大量的编程练习和阅读优质的代码可能是这个阶段最能够帮助到大家的两件事情。接下来我们还是通过经典的案例来剖析面向对象编程的知识,同时也通过这些案例为大家讲解如何运用之前学过的Python知识。经典案例案例1:扑克游戏。说明:简单起见,我们的扑克只有52张牌(没有大小王),游戏需要将52张牌发到4个玩家的手上,每个玩家手上有13张牌,按照黑桃、红.

2020-07-28 16:48:15 426 1

原创 从零学Python:17课-面向对象编程(进阶)

上一节课我们讲解了Python面向对象编程的基础入门知识,这一节课我们继续来讨论面向对象编程相关的内容。另外上节课很多伙伴要了视频学习教程,提醒大家哈,认真的看完,不清楚的地方,可以再说!可见性和属性装饰器在很多面向对象编程语言中,对象的属性通常会被设置为私有(private)或受保护(protected)的成员,简单的说就是不允许直接访问这些属性;对象的方法通常都是公开的(public),因为公开的方法是对象能够接受的消息,也是对象暴露给外界的调用接口,这就是所谓的访问可见性。在Python中

2020-07-28 15:12:23 342

转载 常用排序算法(c语言篇)

最近重新回顾了一下数据结构和算法的一些基本知识,简单整理下C语言下的常见排序算法。选择排序selectSort选择排序是最简单的一种基于O(n2)时间复杂度的排序算法,基本思想是从i=0位置开始到i=n-1每次通过内循环找出i位置到n-1位置的最小(大)值void selectSort(int arr[], int n){ int i, j , minValue, tmp; for(i = 0; i < n-1; i++) { minValue

2020-07-28 13:46:39 341

转载 C++面试题总结(一)

1. 面向对象的程序设计思想是什么?答:把数据结构和对数据结构进行操作的方法封装形成一个个的对象。2. 什么是类?答:把一些具有共性的对象归类后形成一个集合,也就是所谓的类。3. 对象都具有的两方面特征是什么?分别是什么含义?答:对象都具有的特征是:静态特征和动态特征。静态特征是指能描述对象的一些属性(成员变量),动态特征是指对象表现出来的行为(成员函数)4. 在头文件中进行类的声明,在对应的实现文件中进行类的定义有什么意义?答:这样可以提高编译效率,因为分开的话只需要编译一次

2020-07-28 13:44:23 366

转载 C++引用之给已有的变量取个别名

1、引用的概述引用是c++对c的重要扩充。在c/c++中指针的作用基本都是一样的,但是c++增加了另外一种给函数传递地址的途径,这就是按引用传递(pass-by-reference),它也存在于其他一些编程语言中,并不是c++的发明。变量名实质上是一段连续内存空间的别名,是一个标号(门牌号) 程序中通过变量来申请并命名内存空间 通过变量的名字可以使用存储空间对一段连续的内存空间只能取一个别名吗? c++中新增了引用的概念,引用可以作为一个已定义变量的别名。 基本语法: Type& .

2020-07-28 13:44:16 342

转载 C++面试题总结(二)

51. 引用与指针有什么区别?答 :1) 引用必须被初始化,指针不必。2) 引用初始化以后不能被改变,指针可以改变所指的对象。3) 不存在指向空值的引用,但是存在指向空值的指针。52. 描述实时系统的基本特性答 、在特定时间内完成特定的任务,实时性与可靠性。54. 全局变量和局部变量在内存中是否有区别?如果有,是什么区别?答 、全局变量储存在静态数据区,局部变量在堆栈中。55. 堆栈溢出一般是由什么原因导致的?答 、没有回收垃圾资源56. 什么函数不能声明为虚函数?

2020-07-28 13:43:59 346

转载 c++中的动态数组使用

C++的new操作符是该语言一个非常好的语法特性,然而实际使用中却发现new操作符有不少限制,为突出的一点便是用new操作符分配多维数组空间时,不能让数组的每一维都动态可变。本文将对此提出一个简单直观的解决方案,在一个实际问题的简化模型中加以说明,并以此释清许多初学者对C++中new操作符与多维数组的误区。1. 问题的提出--多维可变数组的实际用途  下面是实际编程中遇到问题的一个简化模型。ChessBoard是一个棋盘类,其中的m_board是用来保存棋盘上棋子信息的二维数组。DIMENSION是

2020-07-28 13:43:37 338

转载 C++引用之用法详解

1、引用作为函数的参数void my_swap1(int a,int b){ int tmp = a; a = b; b=tmp;}void my_swap2(int *a,int *b)//a=&data1,b =data2;{ int tmp = *a; *a = *b; *b = tmp;}void my_swap3(int &a, int &b)//a=data1,b=data2{ int tmp = a; a =

2020-07-27 13:28:08 364

转载 代码编写小窍门(解决复制粘贴带行号问题)

大家在初学编程的 时候,经常会从网上复制部分代码,但偶尔复制的情况不尽如人意,比如下边这种情况: 1 #include<stdio.h> 2 #include<signal.h> 3 #include<unistd.h> 4 #include<stdlib.h> 5 #include<fcntl.h>

2020-07-27 13:28:00 377

转载 守护进程的创建

1.概念守护进程也称精灵进程,是在后台运行的一种特殊进程,它脱离控制终端并且周期性的执行某种任务或者等待某种事件的发生,脱离终端是为了避免进程在执行过程中的信息在任何终端上显示,并且进程也不会被任何终端产生的中断信息所终止;linux下的大多 服务器都是用守护进程实现的。比如internet 的inted 和wed 服务器httpd2.创建守护进程的一般步骤(1)调用umask重设文件权限掩码文件权限掩码:指屏蔽掉文件权限中的对应位。例如,有个文件权限掩码为050,它就屏蔽掉了文件组拥有者的

2020-07-27 13:27:43 351

转载 编程语言的最终梦想:静态类型安全

什么是类型安全?类型安全很大程度上可以等价于内存安全,类型安全的代码不会试图访问自己没被授权的内存区域。“类型安全”常被用来形容编程语言,其根据在于该门编程语言是否提供保障类型安全的机制;有的时候也用“类型安全”形容某个程序,判别的标准在于该程序是否隐含类型错误。类型安全的编程语言与类型安全的程序之间,没有必然联系。好的程序员可以使用类型不那么安全的语言写出类型相当安全的程序,相反的,差一点儿的程序员可能使用类型相当安全的语言写出类型不太安全的程序。绝对类型安全的编程语言暂时还没有。常听人说“强类型

2020-07-27 13:27:35 362

转载 细谈c++的const

C++const关键字小结const 是constant的缩写,本意是不变的,不易改变的意思。const 在C++中是用来修饰内置类型变量,自定义对象,成员函数,返回值,函数参数。1、C语言的const特点const int a = 10;//不要把a看成常量//a的本质 是变量 只是 只读变量c语言的const修饰全局变量 默认是(外部链接的)fun.c //c语言的const修饰全局变量 默认是(外部链接的) //外部链接:其他源文件 可以使用 ..

2020-07-27 13:27:26 355

转载 using在c++中的用法

1、简化了命名空间的成员访问 namespace veryLongName { int a=100; void func(){cout<<"hello namespace"<<endl;} } void test07() { //使用veryLongName命名空间 using namespace veryLongName; //出现的变量 从当前作用寻找a,如

2020-07-24 13:28:09 431 1

转载 C++多态的原理

面向对象的三个基本特征是:封装、继承、多态。今天简单说一下C++多态的原理:首先我们先看一个代码:class A{ public: virtual void foo() { cout<<"我是父类"<<endl; }}class B :public A{ public: virtual void foo() { cout<<"我是子类"&

2020-07-24 13:27:50 409

转载 细谈c++对c增强

1、c++语法检查增强全局变量检测增强以上c代码c编译器编译可通过,c++编译器无法编译通过2、c++对结构体的增强1、c中定义结构体变量需要加上struct关键字,c++不需要2、c中的结构体只能定义成员变量,不能定义成员函数。c++即可以定义成员变量,也可以定义成员函数C语言:struct stu{ int num; char name[32];/* c语言 不允许在结构体中 定义成员函数 void func(void) {

2020-07-24 13:27:38 386

转载 电脑快捷键的使用

闲来无事,整理一下常见电脑快捷键的使用,希望能帮到那些上课偷偷打游戏、眼神不好、记性不好的同学,哈哈哈,开玩笑。一、电脑锁屏(win+L)有些时候,需要暂时离开座位去处理其他事,可是电脑还有数据再跑。关掉的话,数据就白跑了,不关的话,又不想让别人看到我电脑的资料。那么就按住windows键后,再按L键。这样电脑就直接锁屏了,不用担心电脑的资料外泄。二 、步骤记录器(win+R)1、工作过程中,大佬帮你解决问题时,一顿操作,眼花缭乱,啥也没记住,这个时候就可以使用windows键+R,输

2020-07-24 13:27:27 422

转载 详解c++的命名空间namespace

1、命名空间的概述在c++中,名称(name)可以是符号常量、变量、函数、结构、枚举、类和对象等等。工程越大,名称互相冲突性的可能性越大。另外使用多个厂商的类库时,也可能导致名称冲突。为了避免,在大规模程序的设计中,以及在程序员使用各种各样的C++库时,这些标识符的命名发生冲突,标准C++引入关键字namespace(命名空间/名字空间/名称空间),可以更好地控制标识符的作用域。2、命名空间的定义//定义一个名字为A的命名空间(变量、函数)namespace A { int a =

2020-07-24 13:27:07 387

原创 从零学Python:第十六课-面向对象编程入门

面向对象编程是一种非常流行的编程范式(programming paradigm),所谓编程范式就是程序设计的方法学,也就是程序员对程序的认知和理解。前面的课程中我们说过“程序是指令的集合”,运行程序时,程序中的语句会变成一条或多条指令,然后由CPU(中央处理器)去执行。为了简化程序的设计,我们又讲到了函数,把相对独立且经常重复使用的代码放置到函数中,在需要使用这些代码的时候调用函数即可。如果一个函数的功能过于复杂和臃肿,我们又可以进一步将函数进一步拆分为多个子函数来降低系统的复杂性。不知大家是否发现

2020-07-23 17:58:36 461 1

提示
确定要删除当前文章?
取消 删除