关于零基础:CC语言基础知识总结Mysql-join-连接查询

一、连贯查问: 是将两个查问(或表)的每一行,以“两两横同对接”的形式,所失去的所有行的后果,即一个表中的某行,跟另一个表中的某行。进行“横向对接”,失去一个新行。 连贯查问包含以下这些不同模式,连贯形式:穿插连贯、内连贯、外连贯(分:左外连贯,右外连贯) 连贯查问语法: select * from 表名 [连贯形式] join 表名 [on 连贯条件] where ...; 测试数据: mysql> select * from test;+----+--------+------+------+| id | name | sex | age |+----+--------+------+------+| 1 | name1 | 女 | 15 || 2 | name1 | 女 | 15 || 4 | name2 | 男 | 30 || 5 | name50 | 男 | 12 |+----+--------+------+------+mysql> select * from user;+----+-------+------+| id | name | age |+----+-------+------+| 1 | name1 | 18 || 2 | name2 | 15 || 3 | name3 | 20 || 4 | name4 | 30 |+----+-------+------+ 材料视频收费获取:https://jq.qq.com/?_wv=1027&k=jUsaRsWY,学习直通车穿插连贯 (cross join): ...

November 18, 2020 · 4 min · jiezi

关于零基础:本科学历的我从事Qt开发工程分享处理常见的几个Qt编程问题

前言:Qt是一个1991年由Qt Company开发的跨平台 C++ 图形用户界面利用程序开发框架。它既能够开发GUI程序,也可用于开发非GUI程序,比方控制台工具和服务器。Qt是面向对象的框架,应用非凡的代码生成扩大(称为元对象编译器(MetaObject Compiler, moc))以及一些宏,Qt很容易扩大,并且容许真正地组件编程。 1、如果在窗体敞开前自行判断是否可敞开答: 从新实现这个窗体的closeEvent()函数,退出判断操作。代码演示: void MainWindow::closeEvent(QCloseEvent *event){ if (maybeSave()) { writeSettings(); event->accept(); } else { event->ignore(); }}2、如何用关上和保留文件对话答:应用QFileDialog代码演示: QString fileName = QFileDialog::getOpenFileName(this); if (!fileName.isEmpty()) { loadFile(fileName); }3、如果创立Actions(可在菜单和工具栏里应用这些Action)代码演示: newAct = new QAction(QIcon(":/images/new.png"), tr("&New"), this); newAct->setShortcut(tr("Ctrl+N")); newAct->setStatusTip(tr("Create a new file")); connect(newAct, SIGNAL(triggered()), this, SLOT(newFile())); openAct = new QAction(QIcon(":/images/open.png"), tr("&Open"), this); openAct->setShortcut(tr("Ctrl+O")); openAct->setStatusTip(tr("Open an existing file")); connect(openAct, SIGNAL(triggered()), this, SLOT(open())); saveAct = new QAction(QIcon(":/images/save.png"), tr("&Save"), this); saveAct->setShortcut(tr("Ctrl+S")); saveAct->setStatusTip(tr("Save the document to disk")); connect(saveAct, SIGNAL(triggered()), this, SLOT(save())); saveAsAct = new QAction(tr("Save &As"), this); saveAsAct->setStatusTip(tr("Save the document under a new name")); connect(saveAsAct, SIGNAL(triggered()), this, SLOT(saveAs())); exitAct = new QAction(tr("E&xit"), this); exitAct->setShortcut(tr("Ctrl+Q")); exitAct->setStatusTip(tr("Exit the application")); connect(exitAct, SIGNAL(triggered()), this, SLOT(close())); cutAct = new QAction(QIcon(":/images/cut.png"), tr("Cu&t"), this); cutAct->setShortcut(tr("Ctrl+X")); cutAct->setStatusTip(tr("Cut the current selection's contents to the " "clipboard")); connect(cutAct, SIGNAL(triggered()), textEdit, SLOT(cut())); copyAct = new QAction(QIcon(":/images/copy.png"), tr("&Copy"), this); copyAct->setShortcut(tr("Ctrl+C")); copyAct->setStatusTip(tr("Copy the current selection's contents to the " "clipboard")); connect(copyAct, SIGNAL(triggered()), textEdit, SLOT(copy())); pasteAct = new QAction(QIcon(":/images/paste.png"), tr("&Paste"), this); pasteAct->setShortcut(tr("Ctrl+V")); pasteAct->setStatusTip(tr("Paste the clipboard's contents into the current " "selection")); connect(pasteAct, SIGNAL(triggered()), textEdit, SLOT(paste())); aboutAct = new QAction(tr("&About"), this); aboutAct->setStatusTip(tr("Show the application's About box")); connect(aboutAct, SIGNAL(triggered()), this, SLOT(about())); aboutQtAct = new QAction(tr("About &Qt"), this); aboutQtAct->setStatusTip(tr("Show the Qt library's About box")); connect(aboutQtAct, SIGNAL(triggered()), qApp, SLOT(aboutQt()));4、如果创立主菜单答:采纳下面的QAction的帮忙,创立主菜单代码演示: ...

November 13, 2020 · 2 min · jiezi

4. Python中的函数和作用域

Python中的函数和作用域1. 函数1.1 函数的简介当我们在重复使用某一功能时,我们可能会写很多重复的代码,例如我们求圆的周长,当圆的直径改变时,是不是我们又要重新写一遍计算过程呢?如果涉及到很复杂的过程,而下次使用仅仅改变参数,那么我们还有必要重复这一过程吗?这时我们可以利用函数来解决这一问题。一个功能就像黑盒一样,我们不需要知道它是怎么工作的,我们只要知道接口(输入,输出)即可使用。例如Python的内置函数print我们只要知道它需要我们提供哪些参数,以及它会给我们怎样的输出即可。这就是所谓的抽象,我们不知道工作原理,但也能使用它。所以我们可以写一个函数(黑盒),设置直径为输入,周长为输出,当函数写好后,我们只要输入直径即可,不用考虑函数内部是如何计算的,我们得到输出后,继续做我们想做的事情。当我们想做一道菜时,有人负责洗菜,有人切菜,有人炒菜,将这些人的工作合在一起,就完成了做菜这个任务,这就是分解的思想,我们将这个任务看成是函数,许多函数在一起完成了一件比较大的事情。可以简单理解一块可重复使用的代码,我们称之为函数(function),当我们调用函数时,这个函数才会执行。1.2 函数的特征名称参数 (0 或 多个)有docstring (可选,但是建议有,注释的意思)函数体返回一些值以下是定义一个函数简单的例子,注意函数内要有四个空格的缩进,如果没有返回值的话,会默认返回None:#def是用来定义函数的关键字#is_even是函数的名称#i是参数(参数可以是任何类型)#三个引号括起来的是docstring#docstring下面的语句是函数体#return后的是返回值def is_even( i ): """ Input: i是一个正的int类型 Returns True 如果 i 是偶数, 否则返回 False """ print(“inside is_even”) return i%2 == 0#调用函数,并用a接收返回值a = is_even(2)print(a)2. 作用域2.1 形参和实参首先我们先不涉及编程。高中的函数y = f(x),这个x就相当于是形参,指一种抽象,将我们用f(3)的时候,这个3就是实参了,就是实际我们使用的值,形参和实参大致就是这个意思,不要搞混了。例如:def f( x ):#x是形参 x = x + 1 print(‘in f(x): x =’, x) return x#以下是调用函数x = 3#初始化xz = f( x )#调用函数,传入实参,将返回值给z2.2 函数作用域利用pythontutor网站对代码的执行进行可视化,我把所有步骤都截了下来,先看图,右侧反映了变量的变化情况。可以看到函数内是一个作用域,外面是访问不到的(一般情况)。当进入一个函数时,一个新的作用域就被创建了。函数内的x和外面的x不是一个x,x是不可变量,这和之后的list等数据类型不一样,之后再说。函数里可以访问外面的变量函数里不可以修改外部定义的变量以下是是几个例子,如果有不清楚,可以进入 www.pythontutor.com(我推荐的代码可视化网站)中尝试运行。第一个例子,在外边定义了一个x,但是在f内又定义了一个x,这两个x不是一个x,函数内部使用的x是函数内部定义的。def f(y): x = 1 x += 1 print(x)x = 5f(x)print(x)第二个例子,在g中使用的x是外部定义的xdef g(y): print(x) print(x + 1)x = 5g(x)print(x)第三个例子,会报错,不能在内部修改外部的值,UnboundLocalError: local variable ‘x’ referenced before assignmentdef h(y): x += 1x = 5h(x)print(x)3. 参考参考了Mit 6.0001的课件 ...

February 3, 2019 · 1 min · jiezi

给Python初学者推荐一个代码可视化网站

给Python初学者推荐一个代码可视化网站!在学习编程的时候,不明白代码的每一步都发生了什么,变量的作用域是怎样的。这些问题往往会给我们带来很大的困扰,这里我就要推荐一个网站了。http://www.pythontutor.com/代码在线运行,并可以单步执行,并将其可视化,说到这你可能还不明白,没关系我们进入网站看一下。以下是网站主页的一个例子,左边是可编辑的代码,下方的按钮Back和Forward代表向前一步或向后一部,右侧是可视化的窗口,反应了变量的作用域以及绑定关系,是不是一目了然以下是主页的介绍,虽然是英文但是都很简单,可以看到,不仅仅是Python,还支持一些常见的语言的可视化。官网介绍说,已经有500w人使用过本网站了点击箭头指向的链接,可运行我们自己的代码。点进去链接后,有一个编辑框,选择我们的语言(这里是py3.6),然后在框里写我们自己的代码,我简单写了几行测试。然后点击下方的按钮进行可视化运行。运行后的界面是这样的,下方有4个按钮,分别代表代码的执行步骤,向前向后等。右侧是输出框和可视化框。我们运行几步试试。运行了几步后,右侧出现了结果,显示的关系十分清楚!学习的时候,有不明白的代码直接丢进去执行,结果清清楚楚,是学习的利器呀希望我们好好利用本网站去学习,本网站还有一些别的功能,例如志愿者帮助解答代码问题等,可以自行探索如果觉得不错,可以分享可以关注公众号

February 1, 2019 · 1 min · jiezi

1. Python中的基本数据类型、运算、变量

本文利用的是Python 3.x版本,建议学习3.x版本Python中的基本数据类型、运算、变量1. 基本数据类型1.1 整数py可以处理任意大小的整数,例如123,123456789132456,任意大小,而像C,Java等这种语言对整数大小是有要求的,换句话说就是大小是确定的,例如C中的int一般是4个字节,范围是-2147483648~+2147483647,至于为什么py可以这样,因为py内部会根据数的大小进行调整空间,让空间可以存储的下这个数据,因此没有人会说py的int是4个字节(实际上比4大很多)。print(type(3))#会输出数据类型int1.2 浮点数其实就可以理解浮点数是实数,浮点数在计算机内部是以科学记数法表示的,要记住的就是浮点数的运算是有误差的,而整数的运算是永远精确的!!例如,你可以运行以下代码,看看结果是不是和你想的一样print(1.5-1.4)可能会出现下图的结果,这就是因为浮点数不是精确的1.3 字符串用"或’括起来的字符,就是字符串,如果字符串内部有’,则可以用"括起来还可以用转义符号反斜杠,以下是实例print(‘hello’)print(“hello”)print(“I’am “)print(’'’)print(”’"”)# \n是换行,如果\n在字符串里不方便阅读,还可以写成如下形式print(‘‘’line1line2line3’’’)# 等价于print(’line1\nline2\nline3’)# print函数默认会输出后换行,关于print的具体用法之后再说1.4 布尔值布尔值是True 或 False,要么为真要么为假,例如(10<5)这个式子是不正确的,则这个式子的布尔值是False。一般布尔值和布尔运算用在判断表达式中and,or,not 是三个布尔运算的操作符。True and False的结果为False,就是说用and运算的布尔值,只要有一个是False,则结果为False,必须全为True,才能为True,True or False的结果为True,用or运算的布尔值只要有一个为True,则结果为True,全为False时结果才是False,not False的结果是True,not用来取反。例如以下代码print(True or False)print(True and False)print(not True)以下是布尔运算真值表,包含了上面描述的情况。1.5 空值空值是py里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。总结以上是py的基本数据类型,此外py还提供了列表、字典等多种数据类型,还允许创建自定义数据类型,以后会涉及到。2. 表达式运算有了数据以后,我们还得对数据进行运算以得到我们想要的结果。数据对象和操作符结合后,组成了表达式,一个简单的表达式为2 + 3两个操作数,一个操作符。以下是基本的数的运算操作符1 + 2 #和1 - 2 #差1 * 2 #积#以上的结果都是int,如果其中有一个数为float,则结果为float1 / 2 #商,结果是float3 % 2 #模运算,也就是求余数5 // 2 #整除运算,结果是223 #乘法运算,结果是8以下是测试图片3. 变量3.1 什么是变量变量基本和代数中变量是一个意思,例如我们在方程中最常用的x。只不过在计算机中变量可以代表各种各样的数据类型。变量在程序中就是用一个变量名表示了,变量名必须是大小写英文、数字和_的组合,且不能用数字开头。在编程语言中,等号=不再是数学上相等的概念了,而是赋值的意思,也可以说是分配值,例如以下代码pi = 3.14159左边的pi代表变量,右边的3.14159代表值,将值利用=赋予给变量pi,这就是以上代码的含义。值储存在计算机的内存中,可以看成是将这个值和一个名字进行了绑定,当我们需要使用这个值的时候,只需使用pi即可。就像我们每个人都有名字一样,一个名字对应了一个人(不考虑重名)。为什么要给值一个名字呢,为了我们使用方便,例如pi = 3.14159r = 2.2area = pi*(r2)##计算圆的面积不用每次都使用3.14159,而且顾名思义,变量是会发生变化的,在程序运行中途可能发生变化,我们无法提前预知,所以这个时候更加展现出了变量的作用。我们看以下代码x = 5x = x + 1print(x)#结果为6如果按照数学上的理解x=x+1是不成立,但是在计算机中=是赋值号,所以这个式子的意思是将x+1的值赋予给x,x+1的值是6,所以最后将6赋予给x,所以x最终的结果为63.2 改变变量的值我们可以重新绑定变量和值,使用一个赋值式子即可,例如x = 6print(x)x = 5print(x)#输出为6和5现在x和5绑定在了一起,6这个值依然存储在计算机的内存中,但是可能没有变量和其绑定,所以我们再也不能使用这值了,就算我们新分配一个6给x,这个6也不是之前的6了。所以可以说之前这个6是一个废值,py内部会有垃圾回收机制,检测到这个值是垃圾后,会回收这块空间供之后分配的值使用。我画了以下的图便于理解。我们也可以将x绑定为其他数据类型,例如x = 5x = True如果读者会类似于C或Java(静态语言)的语言的话,会觉得如上的写法不可思议,会报错,但是在py这就可以使用,因为x仅仅是一个名字,和哪个值绑定完全取决于我们,但是不建议这样更改绑定的数据类型,最好从始至终让变量保持一种数据类型。例如两个人合作写代码,第一个人开始将x作为int使用,后来当作字符串使用,第二个人在阅读第一个人写的代码时,稍有不慎就会将x的数据类型搞错,从而带来不必要的麻烦。最后以上只是快速理解和学习的入门级知识,不涉及深入的理解,例如动态语言、对象、引用等概念,可以自己搜索了解。不过建议学习时,首先有一个总体的把握,首先理解这是个什么东西,等大致都清楚后,再深究细节,这样的学习方法我认为比较好。不然一上来就深究细节,对于已经入门的同学来说倒没什么,要是还没入门就深究细节,怕是要劝退。题外话,知识本来就应该反复的学习,温故而知新,一层层的学习。先搞清楚这是什么,怎么来的,有什么用,这样学习起来不会迷茫。国内的教学,例如数学方面,有些不好的地方在于,上来就是公式,定理,而忘了最根本的问题,为什么会有这个公式?这个公式有什么用?(不是做题),例如矩阵的特征值,特征向量,可以用来解决生态系统中的动力方程的问题。这样学起来恐怕就不会那么迷茫了吧如果觉得不错,可以分享可以关注公众号~ ...

January 31, 2019 · 1 min · jiezi

2. Python中的基本输入、输出、格式化输出

本文利用的是Python 3.x版本,建议学习3.x版本Python中的基本输入、输出、格式化输出1. 输入使用input([prompt])读取一行,将其转换为string类型并返回,input的参数可有可无,如果有参数的话,会在控制台(可以这样理解)输出参数的内容,不换行。通常情况下我们在控制台输入一些数据,然后敲击回车,就完成了本次输入。以下是例子。name = input(“Enter your name: “)print(name)这里要注意的是,input返回的是string类型,如果想输入数字,还需要进行类型转换,例如num = int(input(“Enter a number: “))print(num*2)其实以上这种转换并不安全,因为如果user输入字符串的话,没法转为int类型,这样程序就会出错,异常终止。所以一种比较简单的方法是,先对输出进行判断,然后再转换,因为还没有说到判断语句,所以这个判断之后再说。2. 输出一般在控制台中我们用print进行输出,因为比较简单,所以之前也一直在使用。print的原型如下print(*objects, sep=’ ‘, end=’\n’, file=sys.stdout, flush=False)看起来很复杂,但是这个参数都是有默认参数的,我们可以先简单使用前三个参数,后面的默认即可,这样的话,目前而言,我们的print就变成了print(*objects, sep=’ ‘, end=’\n’)第一个参数是我们要在控制台输出的数据,可以是多个,用,逗号隔开,py的print很强大,可以输出很多种数据类型,只要你觉的可以输出的,print都可以输出,你觉得不能输出的,试一试也可能输出。例如print(“xx”)print(1)print(True)print(None)sep用来将多个数据隔开,默认是空格,end加在输出的末尾,默认是换行符print(1,2,3,sep=’@@’,end=’<>\n’)#用@@分隔数据,结尾加上<>并换行3. 格式化输出,占位符如何格式化输出字符串呢,例如你好XX,你的额度是xx,其中xx的变量,我们无法预知,这个时候就需要格式化输出,和C语言一样,我们可以使用占位符%?,其中?代表不同的字符,例如%s代表字符串,%d代表十进制整数,%f代表浮点数,例如name = “Potato"b = 100print(“你好%s,你的额度是%d” % (name,b) )#name将替换%s的位置,b将替换%d的位置,字符串后的%用来说明是哪些变量要替换前面的占位符,当只有一个变量的时候,可以省略括号占位符还可以控制输出的格式,例如保留几位小数,填充前导0等,以下是例子print(“小数: %.2f” % 3.14159)# %.2f代表保留两位小数print(“小数: %.2f” % 4.5)# %.2f保留两位小数,不够的位用0补充print(“占位: %3d” % 5)# %3d代表这个数的宽度为3,不够的话用空格在前面补,如果数的宽度大于3,则正常输出print(“前导0: %05d” % 2)# %05d代表这个数的宽度为5,不够的话用0在前面补,如果数的宽度大于5,则正常输出如果不知道数据类型的话,用%s即转为字符串进行输出会比较稳妥,还有许多种占位符的格式,具体使用时可以搜索,一般常用的就是以上那些。4. 格式化输出,format可以利用string对象的format方法,进行格式化,以下是例子print(“你好{0},你的余额是{1:.2f}".format(“Potato”,3.1))#{0}代表占位符和format里的参数对应,{1:.2f},冒号后是格式控制,代表保留两位小数这种方式使用起来可能不是很方便。或者还可以使用py内置的format函数,例如print(format(3.1415,".2f”))#结果是3.14如果觉得不错,可以分享可以关注公众号

January 31, 2019 · 1 min · jiezi