精华内容
下载资源
问答
  • 五行正确顺序
    千次阅读
    2020-09-18 13:51:07

    ================ select 执行顺序=======================
    一 、select语句关键字的定义顺序:
    select distinct <select_list>
    from <left_table>
    <join_type> join
    on <join_condition>
    where <where_condition>
    group by <group_by_list>
    having <having_condition>
    order by <order_by_condition>
    limit <limit_number>

    二 、 select语句关键字的执行顺序:
    (7) select
    (8) distinct <select_list>
    (1) from <left_table>
    (3) <join_type> join <right_table>
    (2) on <join_condition>
    (4) where <where_condition>
    (5) group by <group_by_list>
    (6) having <having_condition>
    (9) order by <order_by_condition>
    (10) limit <limit_number>

    第一步 执行 from 知道先从<left_table>这个表开始的
    第二步 执行 on 过滤 根据 <join_condition> 这里的条件过滤掉不符合内容的数据
    第三步 执行 join 添加外部行
    -------- inner join 找两张表共同的部分
    --------- left join 以左表为准,找出左表所有的信息,包括右表没有的
    --------- right join 以右表为准,找出左表所有的信息,包括左表没有的
    --------- #注意:mysql不支持全外连接 full JOIN 可以用union
    第四步 执行 where 条件 where后加需要满足的条件,然后就会得到满足条件的数据
    第五步 执行 group by 分组 当我们得到满足where条件后的数据时候,group by 可以对其进行分组操作
    第六步 执行 having 过滤 having 和 group by 通常配合使用,可以对 满足where条件内容进行过滤
    第七步 执行 select 打印操作 当以上内容都满足之后,才会执行得到select列表
    第八步 执行 distinct 去重 得到select列表之后,如果指定有 distinct ,执行select后会执行 distinct去重操作
    第九步 执行 order by 排序 以上得到select列表 也经过去重 基本上就已经得到想要的所有内容了 然后就会执行 order by 排序asc desc
    第十步 执行 limit 限制打印行数,我们可以用limit 来打印出我们想要显示多少行。

    更多相关内容
  • MySql 语句执行顺序

    千次阅读 2021-01-19 19:51:37
    一、手写SQL顺序select from join on where group by having order by limit 二、MySql执行顺序from on join where group by having select distinctorder by limit 三、MySql执行顺序理解第一步:加载from子句的前...

    一、手写SQL顺序

    select

    from

    join on

    where

    group by

    having

    order by

    limit

    二、MySql执行顺序

    from

    on

    join

    where

    group by

    having

    select

    distinct

    order by

    limit

    三、MySql执行顺序理解

    第一步:加载from子句的前两个表计算笛卡尔积,生成虚拟表vt1;

    第二步:筛选关联表符合on表达式的数据,保留主表,生成虚拟表vt2;

    第三步:如果使用的是外连接,执行on的时候,会将主表中不符合on条件的数据也加载进来,做为外部行

    第四步:如果from子句中的表数量大于2,则重复第一步到第三步,直至所有的表都加载完毕,更新vt3;

    第五步:执行where表达式,筛选掉不符合条件的数据生成vt4;

    第六步:执行group by子句。group by 子句执行过后,会对子句组合成唯一值并且对每个唯一值只包含一行,生成vt5,。一旦执行group by,后面的所有步骤只能得到vt5中的列(group by的子句包含的列)和聚合函数。

    第七步:执行聚合函数,生成vt6;

    第八步:执行having表达式,筛选vt6中的数据。having是唯一一个在分组后的条件筛选,生成vt7;

    第九步:从vt7中筛选列,生成vt8;

    第十步:执行distinct,对vt8去重,生成vt9。其实执行过group by后就没必要再去执行distinct,因为分组后,每组只会有一条数据,并且每条数据都不相同。

    第十一步:对vt9进行排序,此处返回的不是一个虚拟表,而是一个游标,记录了数据的排序顺序,此处可以使用别名;

    第十二步:执行limit语句,将结果返回给客户端

    四、其他

    1、on和where的区别?

    简单地说,当有外关联表时,on主要是针对外关联表进行筛选,主表保留,当没有关联表时,二者作用相同。

    例如在左外连时,首先执行on,筛选掉外连表中不符合on表达式的数据,而where的筛选是对主表的筛选。

    2、图解

    fc221d955e44e71460c567f0b4b47ecd.png

    展开全文
  • 学习Python的第节课(顺序结构、选择结构和循环结构) 一、顺序结构 顺序结构的程序设计是最简单的,只要按照解决问题的顺序写出相应的语句就,它的执行顺序是 自上而下,依次执行。 二、选择结构 如果说顺序结构...

    学习Python的第五节课(顺序结构、选择结构和循环结构)

    一、顺序结构

    顺序结构的程序设计是最简单的,只要按照解决问题的顺序写出相应的语句就行,它的执行顺序是
    自上而下,依次执行。
    

    在这里插入图片描述

    二、选择结构

    如果说顺序结构是一条路走到底,那么选择结构就会有多条路供你选择。
    

    1、单分支结构

    单分支选择结构是最简单的一种形式,当表达值为True或其他非O值时,表示条件满足,语句块被执
    行,否则什么都不执行。
    

    在这里插入图片描述
    在这里插入图片描述

    2、双分支结构

    执行过程:先判断表达式的值,当其值为True或其他非o值,执行语句块1,否则执行语句块2。
    

    在这里插入图片描述
    在这里插入图片描述

    3、多分支结构

    在这里插入图片描述
    在这里插入图片描述

    4、选择结构嵌套

    Python语句块没有开始与结束符号,因此,使用嵌套结构时,一定要严格控制好不同级别代码块的
    缩进量,因为这决定了不同代码块的从属关系以及业务逻辑是否被正确地实现、是否能够被Python
    正确理解和执行。
    

    在这里插入图片描述
    在这里插入图片描述

    三、循环结构

    循环结构是指在给定条件成立时(即表达式为真时),反复执行某语句块,直到条件不成立为止。
    

    1、for循环

    for循环的一般形式:
    for n in sequence:
    	statements
    
    其中sequence可以是等差数列、字符串、列表元组或者是一个文件对象。变量n依次被赋值为序列中的每		
    一个值,然后执行循体sequence最常见的一种形式是等差数列:range(start,stop,step)。其中start和step是可
    选项,比range(0,99,1),也可简写为range(100)。
    

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    2、while循环

    当条件表达式(condition)为True或者非0值时,执行循环体(Statement),否则跳出循环,继续往下执行。
    

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    3、循环嵌套

    循环嵌套是指在一个循环体内又包含另一个循环。嵌套可以分为多层,每一层循环在逻辑上必须是完整的。在编写程
    序代码时,循环嵌套的书写要采用缩进形式,内循环中的语句应该比外规律地向右缩进4列。
    

    循环嵌套结构的代码,Python解释器执行的流程为:

    ①当外层循环条件为True时,则执行外层循环结构中的循环体;
    ②外层循环体中包含了普通程序和内循环,当内层循环的循环条件为True时会执行此循环中的循环体,直到内层循环条件为False,跳出内循环;
    ③如果此时外层循环的条件仍为True ,则返回第2步,继续执行外层循环体,直到外层循环的循环条件为False;
    ④当内层循环的循环条件为False,且外层循环的循环条件也为False,则整个嵌套循环才算执行完毕。
    

    在这里插入图片描述

    4、无限循环

    无限循环(infinite loop)又名死循环(endlessloop),顾名思义,循环控制条件永远为真,使程序无限期执行下去。
    

    在这里插入图片描述
    在这里插入图片描述

    四、作业

    编程1

    求所有水仙花数。水仙花数是指一个三位数,其个位、十位、百位3个数字的立方和等于这个数本身。并断定有没有四位数的水仙花数?

    for i in range(100,1000):
        a=i % 10             #个位
        b=int(i % 100 / 10)  #十位
        c=int(i / 100)       #百位
        if (a*a*a+b*b*b+c*c*c==i):
            print("水仙花数为:",i)
    ```python
    for i in range(1000,10000):
        a=i % 10             #个位
        b=int(i % 100 / 10)  #十位
        c=int(i / 100)       #百位
        if (a*a*a+b*b*b+c*c*c==i):
            print("水仙花数为:",i)
    

    编程2

    计算斐波那契数列的前30项之和。
    斐波那契数列:1,1,2,3,5,8,13,21, 34,55,.….提示:除了前两项,后面的每一项是其前两项之和。

    a=b=1
    s=2
    for n in range(3,30):
        t=a
        a=b
        b=t+a
        s=s+b
    print(s)
    
    展开全文
  • 这篇文章将详细讲解顺序控制语句和条件控制语句。 这系列文章入门部分将参考“尚硅谷”韩顺平老师的视频和书籍《GO高级编程》,详见参考文献,并结合作者多年的编程经验进行学习和丰富,且看且珍惜吧!后续会结合...

    作为网络安全初学者,会遇到采用Go语言开发的恶意样本。因此从今天开始从零讲解Golang编程语言,一方面是督促自己不断前行且学习新知识;另一方面是分享与读者,希望大家一起进步。前文介绍了Golang的运算,包括算术运算、逻辑运算、赋值运算、位运算及编程练习。这篇文章将详细讲解顺序控制语句和条件控制语句。 这系列文章入门部分将参考“尚硅谷”韩顺平老师的视频和书籍《GO高级编程》,详见参考文献,并结合作者多年的编程经验进行学习和丰富,且看且珍惜吧!后续会结合网络安全进行GO语言实战深入,加油~

    这些年我学过各种编程语言,从最早的C语言到C++,再到C#、PHP、JAVA,再到IOS开发、Python,到最新的GO语言,学得是真的杂。有时候觉得编程语言恰恰是最简单的,而通过一门编程语言能够解决实际问题或深入底层才是其价值所在,并且当我们学好一门编程语言后,其他编程语言都非常类似,殊途同归,学起来也很迅速。

    在这里插入图片描述

    源码下载地址:

    前文参考:


    在程序中,程序运行的流程控制决定程序是如何执行的,也是大家必须要掌握的,主要有三大流程控制语句。这篇文章先介绍前两个流程控制。

    • 顺序控制
    • 分支控制
    • 循环控制

    一.顺序控制语句

    顺序控制是指程序从上到下逐行地执行,中间没有任何判断和跳转。其流程图如下所示:

    在这里插入图片描述

    下面举个简单的案例说明。代码中没有判断,程序按照默认的流程执行,即顺序控制。

    package main
    import "fmt"
    
    func main() {
    	//假如还有97天放假 问多少个星期多少天
    	var num int = 97
    	var week int
    	var day int
    	week = num / 7
    	day = num % 7
    	fmt.Printf("%d个星期零%d天 \n", week, day)
    
    	//定义一个变量保存华氏温度 转换成摄氏温度
    	//摄氏温度=5/9*(摄氏温度-32)
    	var huashi float32 = 134.2
    	var sheshi float32
    	sheshi = 5.0 / 9 * (huashi - 32)
    	fmt.Printf("%v 对应的摄氏温度=%v \n", huashi, sheshi)
    }
    

    输出结果如下图所示:

    在这里插入图片描述

    注意,Golang中定义变量时采用合法的前向引用,比如正确形式:

    func main() {
    	var num1 int = 10          //声明num1
    	var num2 int = num1 + 20   //使用num1
    	fmt.Println(num2)
    }
    

    错误形式:

    func main() {
    	var num2 int = num1 + 20   //使用num1
    	var num1 int = 10          //声明num1(x)
    	fmt.Println(num2)
    }
    

    二.条件控制语句

    分支控制是让程序有选择执行,包括三种常见形式:

    • 单分支
    • 双分支
    • 多分支

    1.单分支控制

    基本语法如下:

    if 条件表达式 {
    	执行代码块
    }
    

    说明:当条件表达式为True时,就会执行括号中的代码块。 注意{}是必须有的,即使只写一行代码。对应的流程图如下所示:

    在这里插入图片描述

    案例分析:编写代码实现输入人的年龄,如果年龄大于18岁,则输出“你的年龄大于18岁”。

    package main
    import "fmt"
    
    func main() {
    	//输入年龄
    	var age int
    	fmt.Println("请输入年龄:")
    	fmt.Scanln(&age)
    
    	//单分支判断
    	if age > 18 {
    		fmt.Println("你的年龄大于18岁")
    	}
    }
    

    输出结果如下图所示:

    在这里插入图片描述

    注意事项:

    • 在golang中支持在if语句直接定义一个变量,如下所示:
    if n := 20; n > 5 {
    	fmt.Println("定义变量的值数字大于5")
    }
    

    2.双分支控制

    基本语法如下:

    if 条件表达式 {
    	执行代码块1
    } else {
    	执行代码块2
    }
    

    说明:当条件表达式为True时,否则执行代码块2。注意{}是必须有的,即使只写一行代码。 对应的流程图如下所示:

    在这里插入图片描述

    案例分析:编写代码实现输入人的年龄,如果年龄大于18岁,则输出“你的年龄大于18岁”;否则输出“你的年龄小于等于18岁”。

    package main
    import "fmt"
    
    func main() {
    	//输入年龄
    	var age int
    	fmt.Println("请输入年龄:")
    	fmt.Scanln(&age)
    
    	//单分支判断
    	if age > 18 {
    		fmt.Println("你的年龄大于18岁")
    	} else {
    		fmt.Println("你的年龄小于等于18岁")
    	}
    }
    

    输出结果如下图所示:

    在这里插入图片描述

    注意事项:

    • 条件表达式是age > 18,执行代码块1和执行代码块2
    • 双分支只会执行其中一个分支

    条件语句嵌套
    案例:对下列代码,若有输出,指出输出结果。

    package main
    import "fmt"
    
    func main() {
    	var x int = 4
    	var y int = 1
    	
    	//双分支嵌套判断
    	if (x > 2) {
    		if (y > 2) {
    			fmt.Println(x + y)
    			fmt.Println("执行语句:----a----")
    		}
    		fmt.Println("执行语句:----b----")
    	} else {
    		fmt.Println("x is", x, "y is", y)
    		fmt.Println("执行语句:----c----")
    	}
    }
    

    输出结果如下图所示:

    在这里插入图片描述

    条件判断

    • 声明两个int32型变量并复制,判断两个数之和,如果大于等于50输出
    • 声明两个float64型变量,判断第一个数大于10.0,并且第二个数小于20.0输出两数之和
    • 声明两个int32型变量,判断两者之和是否能被3又能被5整除,输出信息
    package main
    import "fmt"
    
    func main() {
    	//判断两个数之和大于等于50
    	var n1 int32 = 10
    	var n2 int32 = 50
    	if n1 + n2 >= 50 {
    		fmt.Println("相加结果大于等于50")
    	}
    
    	//判断第一个数大于10.0,并且第二个数小于20.0
    	var n3 float64 = 11.0
    	var n4 float64 = 17.0
    	if n3 > 10.0 && n4 < 20.0 {
    		fmt.Println("输出两数之和 =", (n3+n4))
    	}
    	
    	//判断两者之和是否能被3又能被5整除
    	var n5 int32 = 10
    	var n6 int32 = 5
    	if (n5 + n6) % 3 == 0 && (n5 + n6) % 5 ==0 {
    		fmt.Println("能被3和5整除")
    	}
    }
    

    输出结果如下图所示:

    在这里插入图片描述

    错误案例1:编译错误,缺少括号{}

    • syntax error: unexpected newline, expecting { after if clause

    在这里插入图片描述

    错误案例2:编译错误,else不能换行

    • syntax error: unexpected else, expecting }

    在这里插入图片描述


    3.多分支控制

    基本语法如下:

    if 条件表达式1 {
    	执行代码块1
    } else if 条件表达式2 {
    	执行代码块2
    }
    ...
     else {
     	执行代码块n
    }
    

    说明:

    • 先判断条件表达式1是否成立,如果为True,就执行代码块1
    • 如果条件表达式1位False,就去判断条件表达式2是否成立,如果条件表达式2成立,就执行代码块2
    • 依次类推,如果所有的条件表达式不成立,就执行else语句块
    • else不是必须的
    • 注意:多分支语句只能有一个执行入口

    对应的流程图如下所示:

    在这里插入图片描述

    案例分析:编写代码实现考试成绩判断,如果成绩大于等于90则为A,如果成绩[80,90)则为B,依次类推不及格为E。

    package main
    import "fmt"
    
    func main() {
    	//输入变量
    	var score int
    	fmt.Println("请输入成绩:")
    	fmt.Scanln(&score)
    
    	//多分支判断
    	if score >= 90 {
    		fmt.Println("该同学成绩为A")
    	} else if score >=80 && score < 90 {
    		fmt.Println("该同学成绩为B")
    	} else if score >=70 && score < 80 {
    		fmt.Println("该同学成绩为C")
    	} else if score >=60 && score < 70 {
    		fmt.Println("该同学成绩为D")
    	} else {
    		fmt.Println("该同学成绩为E")
    	}
    	fmt.Printf("成绩为:%d", score)
    }
    

    输出结果如下图所示:

    在这里插入图片描述

    注意事项:

    • 初学者需要注意多分支语句的条件判断,经常会陷入判断融合的情况,比如下图只会输出“ok1”。

    在这里插入图片描述

    案例1:融合bool类型多分支判断

    package main
    import "fmt"
    
    func main() {
    	//多分支判断
    	var b bool = true
    	if b == false {
    		fmt.Println("a")
    	} else if b {
    		fmt.Println("b")
    	} else if !b {
    		fmt.Println("c")
    	} else {
    		fmt.Println("d")
    	}
    }
    

    输出结果为“b”,如果将第一个判断修改成“b=false”是否能编译通过呢?答案是否,它会提示编译错误,因为if条件表达式不能是赋值语句。

    在这里插入图片描述

    案例2:输入一个字符,判断:

    • 它是否为大写字母,如果是转换成小写;
    • 它是否为小写字母,如果是转换层大写;
    • 否则,输出原字符
    package main
    import "fmt"
    
    func main() {
    	var ch byte
    	var res byte
    	fmt.Println("请输入字母:")
    	fmt.Scanf("%c", &ch)
    
    	//大小写转换
    	if ch >= 'A' && ch <= 'Z' {
    		res = ch + 32
    	} else if ch >= 'a' && ch <= 'z' {
    		res = ch - 32
    	} else {
    		res = ch
    	}
    	fmt.Printf("输入字母:%c %v \n", ch, ch)
    	fmt.Printf("输出结果:%c %v \n", res, res)
    }
    

    输出结果如下图所示,这道题目非常棒,希望大家熟练掌握。知识点包括:

    • ASCII码大小写转换方法
    • 多分支条件语句
    • char字符型变量输入输出

    在这里插入图片描述


    4.嵌套分支

    在一个分支结果中又完整嵌套另一个完整的分支结构,里面的分支结构称为内层分支,外面的分支结构称为外层分支。基本语法如下:

    if 条件表达式 {
    	if 条件表达式 {
    		语句块
    	} else {
    		语句块
    	}
    	....
    }
    

    注意事项:

    • 嵌套分支不宜过多,建议控制在三层内

    案例分析:

    • 参加百米运动会,如果用时8秒以内进入决赛,否则提示淘汰;并且根据性别提示进入男子组或女子组,我们输入成绩和性别进行相关判断。
    package main
    import "fmt"
    
    func main() {
    	var sex string
    	var second float64
    
    	fmt.Println("请输入秒数:")
    	fmt.Scanln(&second)
    
    	//嵌套分支
    	if second <=8 {
    		fmt.Println("请输入性别:")
    		fmt.Scanln(&sex)
    		if sex == "男" {
    			fmt.Println("进入决赛的男子组")
    		} else if sex == "女" {
    			fmt.Println("进入决赛的女子组")
    		} else {
    			fmt.Println("性别输入错误")
    		}
    	} else {
    		fmt.Println("淘汰未进入决赛")
    	}
    }
    

    输出结果如图所示:

    在这里插入图片描述


    三.switch分支控制

    switch语句用于基于不同条件执行不同动作,每个case分支都是唯一的,从上往下逐一测试,直到匹配为止。注意,匹配项后面不需要再加break

    基本语法如下:

    switch 表达式 {
    
    case 表达式1, 表达式2, ...:
    	语句块1
    case 表达式3, 表达式4, ...:
    	语句块2
    	....
    default:
        语句块n
    }
    

    对应的流程图如下所示:

    • switch的执行流程是先执行表达式,得到值,然后和case的表达式进行比较,如果相等,就匹配到;接着执行对应case的语句块,然后退出switch控制。
    • 如果switch表达式的值没有和任何case的表达式匹配成功,则执行default的语句块,执行后退出switch的控制。
    • golang中的case后的表达式可以有多个,使用逗号间隔。
    • golang中的case语句块不需要写break,因为默认会有。即在默认情况下,当程序执行完case语句块后,就直接退出该switch控制结构。

    在这里插入图片描述

    下面简单实现一个switch语句案例。请编写程序实现输入某个字符,然后a表示周一,b表示周二,c表示周三,根据用户的输入依次显示信息。

    package main
    import "fmt"
    
    func main() {
    	var key byte
    	fmt.Println("请输入a到g的一个字符")
    	fmt.Scanf("%c", &key)
    
    	//switch语句
    	switch key {
    		case 'a':
    			fmt.Println("今天星期一")
    		case 'b':
    			fmt.Println("今天星期二")
    		case 'c':
    			fmt.Println("今天星期三")
    		case 'd':
    			fmt.Println("今天星期四")
    		case 'e':
    			fmt.Println("今天星期五")
    		case 'f':
    			fmt.Println("今天星期六")
    		case 'g':
    			fmt.Println("今天星期天")
    		default:
    			fmt.Println("输入有误....")
    	}
    }
    

    输出结果如下图所示:

    在这里插入图片描述

    注意事项:
    (1) case和switch后是一个表达式,即常量值、变量、一个有返回值的函数等

    在这里插入图片描述

    (2) case后的各个表达式值的数据类型,必须和switch的表达式数据类型一致

    在这里插入图片描述

    (3) case后面可以带多个表达式,使用逗号间隔,如下图所示:

    在这里插入图片描述

    (4) case后的表达式如果是常量值,则要求不能重复

    在这里插入图片描述

    (5) case后面不需要带break,程序匹配到一个case后就会执行对应的代码块,然后退出switch,如果一个都匹配不到,则执行default

    (6) default语句不是必须的

    (7) switch后也可以不带表达式,类似于if-else分支来使用;同时case中也可以对范围进行判断

    package main
    import "fmt"
    
    func main() {
    	//switch后不接表达式 类似于if-else分支来使用
    	var age int = 10
    
    	switch {
    		case age == 10:
    			fmt.Println("年龄为10")
    		case age == 20:
    			fmt.Println("年龄为20")
    		default:
    			fmt.Println("没有匹配到")
    	}
    
    	//case中也可以对范围进行判断
    	var score int = 90
    	switch {
    		case score > 90:
    			fmt.Println("成绩优秀...")
    		case score >= 70 && score <= 90:
    			fmt.Println("成绩良好...")
    		case score >=60 && score <70:
    			fmt.Println("成绩及格...")
    		default:
    			fmt.Println("不及格")
    	}
    }
    

    (8) switch后也可以直接声明定义变量,分好结束,但不推荐使用。

    在这里插入图片描述

    (9) switch穿透fallthrough。如果在case语句块后增加fallthrough,则会继续执行下一个case,也叫switch穿透。

    package main
    import "fmt"
    
    func main() {
    	//switch穿透fallthrough
    	var age int = 10
    
    	switch age {
    		case 10:
    			fmt.Println("年龄为10")
    			fallthrough   //默认只能穿透一层
    		case 20:
    			fmt.Println("年龄为20")
    			fallthrough
    		case 30:
    			fmt.Println("年龄为30")
    		default:
    			fmt.Println("没有匹配到")
    	}
    
    }
    

    输出结果如下图所示:

    在这里插入图片描述

    (10) Type Switch。switch语句还可以被用于type-switch来判断某个interface(接口)变量中实际指向的变量类型。后续文章会补充interface。

    package main
    import "fmt"
    
    func main() {
    	//type-switch
    	var x interface{}     //定义空接口
    	var y = 10.0
    	x = y
    
    	switch i := x.(type) {
    		case nil:
    			fmt.Printf("x的类型是:%T", i)
    		case int:
    			fmt.Printf("x是int型")
    		case float64:
    			fmt.Printf("x是float64型")   //输出结果
    		case func(int) float64:
    			fmt.Printf("x是func(int)型")
    		case bool, string:
    			fmt.Printf("x是bool或string型")
    		default:
    			fmt.Println("未知类型")
    	}
    }
    

    最后简单总结switch和if的区别:

    • 如果判断的具体数值不多,而且符合整数、浮点数、字符、字符串这几种类型,建议使用switch语句,简洁高效。
    • 其他情况:对区间判断和结果为bool类型的判断使用if,并且if的使用范围更广。
    • 作者个人习惯是使用if语句,很少用到switch语句。

    四.编程练习

    1.题目

    (1) 判断一个年份是否是闰年,闰年的条件是符合以下二者之一。

    • 年份能被4整除,但不能被100整除
    • 年份能被400整除

    (2) 请分别使用if和switch语句实现成绩判断,输出分数对应的等级。

    • [100, 90] => A
    • [80, 90) => B
    • [70, 80) => C
    • [60, 70) => D
    • [0, 60) => E

    (3) 根据淡旺季的月份和年龄,实现一个票价系统。

    • 旺季:4-10月
      成人(18-60岁):60
      儿童(<18):半价
      老人(>60):1/3
    • 淡季
      成人:40
      其他:20

    (4) 使用switch语句实现:根据用户输入月份,输出对应春夏秋冬季节。

    (5) 求ax^2+bx+c=0方程的根。a、b、c分别为函数的参数,如果b^2-4ac>0,则有两个解;如果b^2-4ac=0,则有一个解;否则无解。

    • 提示:x1=(-b+sqrt(b^2-4ac))/2a
    • 提示:x2=(-b-sqrt(b^2-4ac))/2a

    2.答案

    (1) 判断一个年份是否是闰年,闰年的条件是符合以下二者之一。

    • 年份能被4整除,但不能被100整除
    • 年份能被400整除

    代码如下:

    package main
    import "fmt"
    
    func main() {
    	//判断闰年
    	var year int
    	fmt.Println("请输入年份:")
    	fmt.Scanln(&year)
    
    	if (year % 4 == 0 && year % 100 !=0) || year % 400 == 0 {
    		fmt.Println(year, "是闰年~")
    	} else {
    		fmt.Println(year, "不是闰年~")
    	}
    }
    

    输出结果如下图所示:

    在这里插入图片描述


    (2) 请分别使用if和switch语句实现成绩判断,输出分数对应的等级。

    • [100, 90] => A
    • [80, 90) => B
    • [70, 80) => C
    • [60, 70) => D
    • [0, 60) => E

    代码如下:

    package main
    import "fmt"
    
    func main() {
    	var score int
    	fmt.Println("请输入分数:")
    	fmt.Scanln(&score)
    
    	//if判断
    	if score >= 90 {
    		fmt.Println("分数等级为A")
    	} else if score >= 80 && score < 90 {
    		fmt.Println("分数等级为B")
    	} else if score >= 70 && score < 80 {
    		fmt.Println("分数等级为C")
    	} else if score >= 60 && score < 70 {
    		fmt.Println("分数等级为D")
    	} else {
    		fmt.Println("不及格等级为E")
    	}
    
    	//switch判断
    	switch {
    		case score > 90:
    			fmt.Println("分数等级为A")
    		case score >= 80 && score < 90:
    			fmt.Println("分数等级为B")
    		case score >=70 && score < 80:
    			fmt.Println("分数等级为C")
    		case score >=60 && score < 70:
    			fmt.Println("分数等级为D")
    		default:
    			fmt.Println("不及格等级为E")
    	}
    }
    

    输出结果如下图所示:
    在这里插入图片描述


    (3) 根据淡旺季的月份和年龄,实现一个票价系统。

    • 旺季:4-10月
      成人(18-60岁):60
      儿童(<18):半价
      老人(>60):1/3
    • 淡季
      成人:40
      其他:20

    代码如下:

    package main
    import "fmt"
    
    func main() {
    	//出票系统
    	var month byte
    	var age byte
    	var price float64 = 60.0
    
    	fmt.Println("请输入游玩月份:")
    	fmt.Scanln(&month)
    	fmt.Println("请输入游客年龄:")
    	fmt.Scanln(&age)
    
    	if month >= 4 && month <= 10 {
    		//旺季
    		if age > 60 {
    			fmt.Printf("%v月 票价 %v 年龄 %v \n", month, price / 3, age)
    		} else if age >= 18 {
    			fmt.Printf("%v月 票价 %v 年龄 %v \n", month, price, age)
    		} else {
    			fmt.Printf("%v月 票价 %v 年龄 %v \n", month, price / 2, age)
    		}
    	} else {
    		//淡季
    		if age >= 18 && age < 60 {
    			fmt.Println("淡季成人票价 40")
    		} else {
    			fmt.Println("淡季儿童和老人票价 20")
    		}
    	}
    }
    

    输出结果如下图所示:

    在这里插入图片描述


    (4) 使用switch语句实现:根据用户输入月份,输出对应春夏秋冬季节。

    代码如下:

    package main
    import "fmt"
    
    func main() {
    	//季节判断
    	var month byte
    	fmt.Println("请输入月份:")
    	fmt.Scanln(&month)
    
    	switch month {
    		case 3, 4, 5:
    			fmt.Println("Spring")
    		case 6, 7, 8:
    			fmt.Println("Summer")
    		case 9, 10, 11:
    			fmt.Println("Autumn")
    		case 12, 1, 2:
    			fmt.Println("Winter")
    		default:
    			fmt.Println("Error Input")
    	}
    }
    

    输出结果如下图所示:

    在这里插入图片描述


    (5) 求ax^2+bx+c=0方程的根。a、b、c分别为函数的参数,如果b^2-4ac>0,则有两个解;如果b^2-4ac=0,则有一个解;否则无解。

    • 提示:x1=(-b+sqrt(b^2-4ac))/2a
    • 提示:x2=(-b-sqrt(b^2-4ac))/2a

    注意,需要引入math.Sqrt(num)即可求平方根

    package main
    import "fmt"
    import "math"
    
    func main() {
    	/* 
    	 分析思路
    	   1) a,b,c是给出的变量
    	   2) 使用给出的数学公式和多分支语句计算
    	   3) 导入math包计算平方根
    	*/
    	var a float64
    	var b float64
    	var c float64
    	fmt.Println("请输入abc三个变量")
    	fmt.Scanf("%f %f %f", &a, &b, &c)
    	fmt.Printf("a=%v b=%v c=%v \n", a, b, c)
    
    	m := b * b - 4 * a * c
    	if m > 0 {
    		x1 := (-b + math.Sqrt(m)) / (2 * a)
    		x2 := (-b - math.Sqrt(m)) / (2 * a)
    		fmt.Printf("x1=%v x2=%v", x1, x2)
    	} else if m == 0 {
    		x1 := (-b + math.Sqrt(m)) / (2 * a)
    		fmt.Printf("x1=%v", x1)
    	} else {
    		fmt.Printf("无解")
    	}
    }
    

    输出结果如下图所示:

    在这里插入图片描述


    五.总结

    写到这里,这篇基础性Golang文章介绍完毕,希望您喜欢!祝大家新年快乐,牛气冲天,也希望自己能分享更优秀、更深入的文章。

    • 一.顺序控制语句
    • 二.条件控制语句
      1.单分支控制
      2.双分支控制
      3.多分支控制
      4.嵌套分支
    • 三.switch分支控制
    • 四.编程练习
      1.题目
      2.答案

    Go基本运算和进制转换了解后,后面的文章将详细介绍Go语言的条件语句和循环语句知识,并结合案例进行普及。希望这篇基础性文章对您有帮助,写得不好的地方还请海涵。同时非常感谢参考文献中的大佬们的文章分享,尤其是韩顺平老师,深知自己很菜,得努力前行。也希望自己能深入下去,未来四年好好研究Go编程语言,做更多实际工程,写更好的文章,共勉!

    源代码下载地址:

    2020年在github的绿瓷砖终于贴完了第一年提交2100余次,获得1500多+stars,开源93个仓库,300个粉丝。挺开心的,希望自己能坚持在github打卡五年,督促自己不断前行。简单总结下,最满意的资源是YQ爆发时,去年2月分享的舆情分析和情感分析,用这系列有温度的代码为武汉加油;最高赞的是Python图像识别系列,也获得了第一位来自国外开发者的贡献补充;最花时间的是Wannacry逆向系列,花了我两月逆向分析,几乎成为了全网最详细的该蠕虫分析;还有AI系列、知识图谱实战、CVE复现、APT报告等等。当然也存在很多不足之处,希望来年分享更高质量的资源,也希望能将安全和AI顶会论文系列总结进来,真诚的希望它们能帮助到大家,感恩有你,一起加油~

    在这里插入图片描述

    2020年8月18新开的“娜璋AI安全之家”,主要围绕Python大数据分析、网络空间安全、人工智能、Web渗透及攻防技术进行讲解,同时分享论文的算法实现。娜璋之家会更加系统,并重构作者的所有文章,从零讲解Python和安全,写了近十年文章,真心想把自己所学所感所做分享出来,还请各位多多指教,真诚邀请您的关注!谢谢。

    在这里插入图片描述

    (By:娜璋AI之家 Eastmount 2021-02-16 星期二 夜于贵阳 https://blog.csdn.net/Eastmount)


    参考文献:


    展开全文
  • MySQL的查询语句语法虽然是描述性语言,但是在使用的时候,我发现如果语句书写顺序正确的话,还是很容易发生报错的,如果您已经学了查询语句的概念,但是写代码的时候有些模糊,那我后面写的可能会对您有所帮助!...
  • 《西游记》八十一难的顺序

    千次阅读 2021-11-11 15:38:01
    第一难:金蟾遭贬 第二难:出胎几杀 第三难:满月抛江 第四难:寻亲报怨 第难:出城逢虎 第六难:落坑折从 第七难:双叉岭上 第八难:两界山头 第九难:陡涧换马 第十难:夜被火烧 第...
  • 线性表是一种在实际中广泛使用的数据结构,每个元素都有唯一的前去和唯一的后继,前一个元素没有前驱只有后继,最后一个元素没有后继只有前驱,常见的线性表:顺序表、链表、栈、队列、字符串。 数组不等于线性表,...
  • 文章章节常用序号编排(数字序号顺序

    万次阅读 多人点赞 2019-12-05 16:42:33
    序号Sequence Number,有顺序的号码,如数字序号:1、2、3……,大写汉字也算数字序号,如:一、二、三……序号可以清晰的分清同一类事物,也可以用序号作文章的小标题。我们在写文章,特别是在写论文中经常会用一些...
  • 正确地创建和使用索引是实现高性能查询的基础。前面文章MySQL性能优化(三):深入理解索引的这点事已经介绍了各种类型的索引及其特点,而在实际使用索引中,如何真正有效地发挥索引的价值,还需要进一步持续不断第...
  • 项目要求修改原本验证码登录为顺序点击图片验证码登录 验证码登录: 顺序点击汉字验证码登录: 这里就不讲解前端样式如何做的了,因为我是前后端分离,所以只做后端接口开发,将后台生成的图片返回给前台,前台...
  • 消息的顺序问题 消息的重复问题 RocketMQ作为阿里开源的一款高性能、高吞吐量的消息中间件,它是怎样来解决这两个问题的?RocketMQ有哪些关键特性?其实现原理是怎样的? 关键特性及其实现原理 一、顺序...
  • 实参和形参在数量上,类型上,顺序上应严格一致, 否则会发生“类型不匹配”的错误。 函数调用中发生的数据传送是单向的。 即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。 因此在函数调用过程中...
  • 内核会在过去曾使用过init的几个地方查找它,它的正确位置(对Linux系统来说)是/sbin/init。如果内核找不到init,它就会试着运行/bin/sh,如果运行失败,系统的启动也会失败。 二、运行级别 简单的说,运行级就是...
  • 班级姓名座号一、选择题1、人们利用计算机解决问题的基本过程一般有如下个步骤(①~⑤),请按各步骤的先后顺序在下列选项(A~D中选择正确的答案()①调试运行程序②分析冋题③设计算法④冋题解决⑤编写程序A、①②③...
  • 本篇博客讲解的是Java基础中的流程语句篇章,主要的知识点为顺序结构、选择结构、循环结构、控制循环结构语句。在文章末尾有对应的面试题方便巩固知识点。
  • js对象遍历输出顺序错乱的问题

    千次阅读 2018-12-24 09:51:00
    一、js对象遍历顺序错乱的原因 下边就来实践一下: var obj={'3':'ccc',name:'abc',age:23,school:'sdfds',class:'dfd',hobby:'dsfd'}; Object.keys(obj) 输出:["3", "name", "age", "school", "class", ...
  • 本文代码实现基本按照《数据结构》课本目录顺序,外加大量的复杂算法实现,一篇文章足够。能换你一个收藏了吧?
  • 消息的顺序问题 消息的重复问题 RocketMQ作为阿里开源的一款高性能、高吞吐量的消息中间件,它是怎样来解决这两个问题的?RocketMQ有哪些关键特性?其实现原理是怎样的? 关键特性及其实现原理 一、顺序...
  • 超硬核!数据结构学霸笔记,考试面试吹牛就靠它

    万次阅读 多人点赞 2021-03-26 11:11:21
    算法个特性: 有穷性:有穷的时间内完成,或者可以说是可接受的时间完成 确定性:对于相同的输入只能得到相同的输出 可行性:描述的操作都可以执行基本操作有限次来实现 输入:零个或多个输入。取自于某个特定...
  • MySQL执行过程以及顺序

    千次阅读 2019-10-10 14:26:09
    实例说明:这段会将所有temp7临时表中的数据按照创建时间(create_time)进行排序,这个过程也不会有列或者损失 3.9:limit limit对中间表Temp8进行分页,产生临时中间表Temp9,返回给客户端。 实例说明:在temp7中...
  • 第1章 Java 主方法中的顺序结构

    千次阅读 多人点赞 2020-05-12 16:01:59
    public class Test4 { public static void main(String[] args) { // 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码 /********** Begin **********/ // 第一步:声明 int 型变量 pre,值为一...
  • 超硬核!小白读了这篇文章,就能在算法圈混了

    万次阅读 多人点赞 2021-03-29 10:21:58
    使用量子随机性随机地重新排列元素,不同的可能性将在不同的宇宙中展开,总有一种可能猴子得到了正确的顺序,量子计算机找到了这个宇宙后,就开始毁灭其他排序不成功的宇宙,剩下一个观察者可以看到的正确顺序的宇宙...
  • 牛逼!Java 从入门到精通,超全汇总版

    万次阅读 多人点赞 2021-05-06 19:40:33
    Java 控制流程 Java 访问控制权限 面向对象 继承 封装 多态 面向对象最主要有三大特征:继承、封装和多态,你可以参考这篇博客 面向对象的三大基本特征和大基本原则 Java 抽象类和接口 ,也可以参考这篇文章 深入...
  • 查询执行流程->SQL解析顺序

    千次阅读 2018-06-29 12:05:49
    优化排序(在老版本MySQL会使用两次传输排序,即先读取指针和需要排序的字段在内存中对其排序,然后再根据排序结果去读取数据,而新版本采用的是单次传输排序,也就是一次读取所有的数据,然后根据给定的列...
  • GCC、头文件查找顺序总结

    万次阅读 2016-04-28 21:56:52
    注意:若编译器在命令行中从左向右顺序读取.o文件,则它们的出现顺序有限制:含有某函数定义的文件 必须出现在含有调用该函数的文件之后。好在GCC无此限制。 编译预处理 ------------------...
  • 保证消息顺序正确姿势 这样的模型就严格保证消息的顺序,细心的你仍然会发现问题,消费端1没有响应Server时有两种情况,一种是M1确实没有到达(数据在网络传送中丢失),另外一种消费端已经消费M1且已经发送响应...
  • Python程序设计第章测验总结

    千次阅读 2021-08-27 17:02:25
    章 函数与应用 5.1 函数与问题分而治之 1.下面说法错误的是_____ A.函数能提高应用的模块性,和代码的重复利用率 B.python的函数可以分为内置函数和用户自定义函数 C.不带返回值的return,相当于返回None D.每个...
  • Python多层装饰器执行顺序理解

    千次阅读 2018-10-11 16:47:05
    但是,博客的最后一个例子我还是没有能够正确写出执行结果。因此我又自己写了一个多层修饰器的例子。以下是我对执行过程的理解。 # an example of python decorator def deco1(func): print(...
  • 常言道:“男怕入错,女怕嫁错郎。”一次考试的超常不值得过分庆幸,一次考试的失误不值得过多自责,将来的努力程度会冲淡这一切。但可怕的是选择了垃圾专业,南辕北辙,越是努力反而越失败。化学专业就是大学最...
  •  序号Sequence Number,有顺序的号码,如数字序号:1、2、3……,大写汉字也算数字序号,如:一、二、三……序号可以清晰的分清同一类事物,也可以用序号作文章的小标题。我们在写文章,特别是在写论文中经常会用...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 156,333
精华内容 62,533
热门标签
关键字:

五行正确顺序