8,流程控制
8.1.2 if else结构
eg:
package main
import "fmt"
func main(){
var score int
fmt.Scan(&score)
if score > 700{
fmt.Println("我要上清华")
}else if score > 600 {
fmt.Println("我要上郑大")
} else if score > 500 {
fmt.Println("我要上河大")
} else{
fmt.Println("我要上大专")
}
- 基本语法
想一想:在使用if的时候,它只能做到满足条件时要做的事情。那万一需要在不满足条件的时候,做某些事,该怎么办呢?
例如:小赵的考试成绩大于90(含)分,那么爸爸奖励他100元钱,否则的话,爸爸就让小赵跪方便面。 有同学可能会想,这道题用if结构也可以实现。如下所示:
package main
import "fmt"
func main(){
//小赵的考试成绩大于90分,那么爸爸奖励他100远钱,否者的话,爸爸就让小赵跪方便面
var score float64
fmt.Println("请输入考试成绩: ")
fmt.Scanf("%f",&score)
if score >= 90{
fmt.Println("奖励100元")
}
if score < 90 {
fmt.Println("跪方便面")
}
}
虽然以上代码可以实现,但是比较麻烦,我们可以使用更简单的方式:else
结构如下:
if 条件判断{
代码语句1
}else{
代码语句2
}
首先先执行if后面的条件判断,如果条件判断成立(结果为真),执行if后面的代码语句1,代码语句1执行完成后,表示整个if---else--结构结束了(else后面的代码语句2不会执行),继续执行后面的代码。如果if后面的条件判断不成立也就是结果为假,那么if后面的代码语句1不会被执行,这时会执行else后面的代码语句2,执行完后,表示整个if—else—结构执行结束了,再执行后续的代码。
下面我们通过if---else—结果完成上面的案例:
package main
import "fmt"
func main(){
//小赵的考试成绩大于90分,那么爸爸奖励他100远钱,否者的话,爸爸就让小赵跪方便面
var score float64
fmt.Println("请输入考试成绩: ")
fmt.Scanf("%f",&score)
if score >= 90{
fmt.Println("奖励100元")
}else {
fmt.Println("跪方便面")
}
}
8.1.3 if 嵌套
我们上面的案例中,使用的是if-else的基本结构,其实if-else结构还可以进行嵌套使用。
例如:输入公交卡当前的余额,只要超过2元,就可以上公交车;如果空座位的数量大于0,就可以坐下:
package main
import "fmt"
func main(){
var money float64
fmt.Println("请输入公交卡钱数:")
fmt.Scanf("%f\n",&money)
if money >= 2{
var seat_count int
fmt.Println("请输入空座位的数量: ")
fmt.Scanf("%d",&seat_count)
if seat_count > 0{
fmt.Println("请坐")
}else {
fmt.Println("不好意思,您只能站着了!")
}
}else {
fmt.Println("余额不足")
}
}
以上案例在if中嵌套了if-else结构,同理在else也可以嵌套if-else结构,这个要根据实际情况确定。下面我们看如下题目:
8.1.3.1 对学员的结业考试成绩评测(大家考虑用if好还是用if-else好)
成绩>=90 :A
90>成绩>=80 :B
80>成绩>=70 :C
70>成绩>=60 :D
成绩<60 :E
- 我们先使用if来实现上面的问题:
package main
import "fmt"
func main(){
fmt.Println("请输入考试成绩: ")
var score int
fmt.Scanf("%d",&score)
if score >= 90 {
fmt.Println("A")
}
if score < 90 && score >= 80{
fmt.Println("B")
}
if score < 80 && score >= 70{
fmt.Println("C")
}
if score < 70 && score >= 60{
fmt.Println("D")
}else {
fmt.Println("E")
}
}
上面的代码我们发现最后都会输出“E”,为什么呢? 解决方案如下:
package main
import "fmt"
func main(){
fmt.Println("请输入考试成绩: ")
var score int
fmt.Scanf("%d",&score)
if score >= 90 {
fmt.Println("A")
}
if score < 90 && score >= 80{
fmt.Println("B")
}
if score < 80 && score >= 70{
fmt.Println("C")
}
if score < 70 && score >= 60{
fmt.Println("D")
}
if score < 60 {
fmt.Println("E")
}
}
8.1.3.2 下面我们来使用if-else 结构来解决上面的问题
案例演示如下:
package main
import "fmt"
func main() {
fmt.Println("请输入考试成绩: ")
var score int
fmt.Scanf("%d", &score)
if score >= 90 {
fmt.Println("A")
} else { //所有小于90分的都执行else,所以需要在else中继续判断(if-else结构的判断)
if score >= 80 {
fmt.Println("B")
} else {
if score >= 70 { //同理这里也不需要小于80的判断
fmt.Println("C")
} else {
if score >= 60 {
fmt.Println("D")
} else {
fmt.Println("E")
}
}
}
}
}
上面的代码虽然满足了我们的需求,但是嵌套的代码非常多,可读性比较差,我们在以后的编程工作中尽量避免这种多重嵌套。
通过这道题,我们发现在这种多条件判断应用的场景中不太适合通过 if(适合一种条件判断的情况)或者是if-else(适合两种条件判断的情况或者是判断条件不是很多的场景)进行判断。
上面的题目更好的方法:if-else if结构
8.1.4 if-else if 结构
if 条件判断{
要执行的代码段
}else if 条件判断{
要执行的代码段
}else if 条件判断{
要执行的代码段
}else if条件判断{
要执行的代码段
}…………………………….else{
}
通过以上的语法格式我们发现,可以写很多的else if结构。 具体的执行过程:程序首先判断第一个if所带的小括号中的判断条件,如果条件成立,也就是返回一个true, 则执行该if所带的大括号中的代码,执行完成后,立即跳出if else-if结构。 如果第一个if所带的判断条件不成立,也就是返回一个false,则继续向下进行判断,依次的判断每一个if所带 的判断条件,如果成立,就执行该if所带的大括号中的代码,如果不成立,则继续向下判断, 如果每个if所带的判断条件都不成立,就看当前这个if else-if结构中是否存在else。 如果有else的话,则执行else中所带的代码,如果没有else,则整个 if-else if什么都不做。 else可以省略。
下面我们使用该结构完成上面的案例:
package main
import "fmt"
func main() {
fmt.Println("请输入考试成绩: ")
var score int
fmt.Scanf("%d", &score)
if score >= 90 {
fmt.Println("A")
}else if score >= 80 {
fmt.Println("B")
}else if score >= 70{
fmt.Println("C")
}else if score >= 60{
fmt.Println("D")
}else {
fmt.Println("E")
}
}
通过以上代码,我们发现if-else if 结构在进行多条件判断时确实比if, if-else(嵌套)要方便很多,并且结构清晰,阅读性比较强。
- 提示用户输入密码,如果密码是“88888”则提示正确,否则要求再输入一次,如果密码是“88888”则提示正确,否则提示错误,程序结束。
import (
"fmt"
)
func main(){
var pwd string
fmt.Println("请输入密码:")
fmt.Scanf("%s",&pwd)
if pwd == "88888"{
fmt.Println("密码输入正确")
}else {
fmt.Println("密码错误,请重新输入:")
fmt.Scanf("%s",&pwd)
if pwd == "88888"{
fmt.Println("密码第二次输入正确!!")
}else{
fmt.Println("密码输入错误!!")
}
}
}
- 练习:提示用户输入用户名,然后再提示输入密码,如果用户名是“admin”并且密码是“88888”,则提示正确,否则,如果用户名不是admin还提示用户用户名不存在,如果用户名是admin则提示密码错误。
import (
"fmt"
)
func main(){
var name string
var pwd string
fmt.Println("请输入用户名:")
fmt.Scanf("%s\n",&name)
fmt.Println("请输入密码:")
fmt.Scanf("%s",&pwd)
if name == "admin" && pwd == "88888"{
fmt.Println("登陆成功!")
}else if name == "admin"{
fmt.Println("密码输入错误!")
}else if pwd == "88888"{
fmt.Println("用户名错误!")
}else {
fmt.Println("用户名和密码全部错误!!")
}
}
用于该题的判断条件比较多,所以这里使用的是if-else if结构。
- 练习:提示用户输入年龄,如果大于等于18,则告知用户可以查看,如果小于10岁,则告知不允许查看,如果大于等于10岁并且小于18,则提示用户是否继续查看(yes、no),如果输入的是yes则提示用户请查看,否则提示"退出,你放弃查看"。
分析: 首先我们分析一下该题的条件:
第一种情况:年龄>=18
第二种情况:年龄<10
第三种情况:年龄>=10&&<18,如果满足该条件,则继续判断用户输入的内容是“yes”还是”no”
根据以上分析,使用if-else if 结构比较容易实现。具体案例展示如下:
package main
import "fmt"
func main(){
var input int
fmt.Println("请输入您的年龄:")
fmt.Scanf("%d",&input)
if input >= 18{
fmt.Println("您可以查看!")
}else if input >= 10 && input < 18{
var input string
fmt.Println("请输入yes 或 no:")
fmt.Scanf("%s",&input)
if input == "yes"{
fmt.Println("允许登陆!")
}else if input == "no"{
fmt.Println("禁止登陆!")
}
}else {
fmt.Println("禁止登陆!")
}
}
总结:我们通过前面的案例讲解,大家应该能够总结出if结构,if-else结构和if-else if结构应用的场景.
- if结构适合:一种的判断
- if-else结构适合:两种情况的判断
- if-else if 结构适合:
多种情况判断,并且判断都是对区间中的数据进行判断(例如:考试成绩)