go语言基础语法02天-3

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 结构适合:

多种情况判断,并且判断都是对区间中的数据进行判断(例如:考试成绩)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值