条件循环语句if,for,range,switch

if以及if else语句

if 条件表达式{
          代码体  ,条件符合则运行这里面的代码
}
if   条件{
         表达式
             }else if  条件{
        
                                     }else条件{
                                                      }   

imooc案例,用了ioutil的方式

func main() {
    const filename = "abc.txt"
    contents ,err :=ioutil.ReadFile(filename)          //ioutil可以读取文件信息
    if err!= nil{
        fmt.Println(err)
    }else {
        fmt.Printf("%s\n",contents)
    }
    fmt.Printf("%s\n",contents)
}

有更简写法为

const filename = "abc.txt"
    if contents ,err :=ioutil.ReadFile(filename);err!= nil {
        fmt.Println(err)
    } else {
            fmt.Printf("%s\n",contents)
        }

if的条件里可以赋值,if后可以跟多个语句
if的条件里赋值的表量作用域就在if语句中,如例4无法使用fmt.Printf("%s\n",contents)输入内容

switch

switch会自动break,除非使用fallthrough

func grade(score int) string {
    g:=""
    switch {
    case score<0 || score>100:
        panic(fmt.Sprintf("wrong score :%d",score))
    case score < 60:
        g ="F"
    case score < 80:
        g = "B"
    case score < 100:
        g = "A"



    fmt.Println(
        grade(6),
        grade(66),
        grade(76),
        grade(86),
        grade(96),
        grade(102),
        )

输入102是会直接中断输出panic: wrong score :102,所有的数字不计算
switch后可以没有表达式,在case表达就可以
panic是报错停止语句

for

sum:=0
    for i :=1;i<5;i++{
        sum+=i
    }
    fmt.Println(sum)

等于10,单用for可以实现无线循环
for {fmt.Println("abc")}
无限打印abc

网易云课堂部分

if支持一个初始化语句,用;分隔开

if score:=150;score>600{
        fmt.Println("上清华")
    }else if score>400 {
        fmt.Println("上白云学院")
    }else{
        fmt.Println("蓝翔")
    }

if的嵌套

if score:=580;score>500{
        fmt.Println("入住清华")
        if score>520 {
            fmt.Println("文科专业")
        }else if score>540 {
            fmt.Println("计算机专业")
        }else {fmt.Println("普通专业")}
    } else {
        fmt.Println("1")
    }

当分数高于540时,无法显示计算机专业
使用倒叙可以显示,因为if程序的运行问题,上面的满足了第一个要求便直接停止了程序,也可以直接嵌套if而不是else if

if score:=510;score>500{
        fmt.Println("入住清华")
        if score>540 {
            fmt.Println("文科专业")
        }else if score>520 {
            fmt.Println("计算机专业")
        }else {fmt.Println("普通专业")}
    } else {
        fmt.Println("1")
    }

switch

switch 变量表达式{
case 值1:
  代码体
case 值2:
  代码体
default :
  代码体
}

     //var score int = 80
    switch score:=80;score {
    case 90:
        fmt.Println("A")
    case 80,70,60:           //多个条件可以放在case后,case支持多个条件的匹配
        fmt.Println("B")
    //case 70:
    //  fmt.Println("C")
    //case 60:
    //  fmt.Println("D")
    default:
        fmt.Println("E")

    }

上面代码中,如果输入85,打印E出来,只有数值分别等于90,80,70的时候才会显示ABC,从上到下匹配,匹配到就结束,效率高
switch会自动break,除非使用fallthrough
switch后可以没有表达式,在case表达就可以

score2:=87
    switch  {
    case score2>90:
        fmt.Println("A")
    case score2>80:
        fmt.Println("B")
    case score2>70:
        fmt.Println("C")
    default:
        fmt.Println("D")

if和switch语句的选择

优点:

  • if语句适合进行区间判断,可以嵌套使用
  • switch执行效率高,适合固定值,可以将多个多个满足相同条件的值放在一起

缺点:

  • if 执行效率低,适合分支少的
  • switch不建议使用嵌套

for循环

    a:=0
    for i:=0;i<=10;i++{        //for 初始化条件;判断条件;条件变化{代码体}
        a+=i
    }
    fmt.Println(a)

for语句的结构
//for 初始化条件;判断条件;条件变化{代码体}

for的3种使用格式
  • for 表达式1;表达式2;表达式3{ }
  • for 返回值 :=range加集合{ }
  • for 条件{}

range

输出两个值,分别是下标和值
下标在前可用_(匿名变量)代替

    str:="abcdefg"
    for i:=0;i<len(str);i++{
        fmt.Printf("str[%d]=%c\n",i,str[i])
    }
    //迭代打印
    //打印两个元素,默认返回两个值,第一个元素位置吗,第二个元素本体
    for i ,data:=range str{
        fmt.Println(i,data)
    }

    for _,i:=range str{
        fmt.Println(i)
    }

第一个方位较为的复杂,没有使用range,但比较以东
用range能打印出结果为

0 97
1 98
2 99
3 100
4 101
5 102
6 103
97
98
99
100
101
102
103

可以通过Printf来转换,让他表达清晰一点

for循环嵌套

百钱白鸡问题
公鸡5钱,母鸡3钱,3个鸡仔1钱

    number:=0
    //百钱百鸡
    for a:=0;a<=20;a++{
        for b:=0;b<=33;b++{
            for c:=0;c<=100;c+=3 {
                if a+b+c == 100 && a*5+b*3+c/3 == 100 {
                    fmt.Println(a,b,c)

                }
                number++
            }
        }
    }
    fmt.Println(number)

24276种组合,4个答案符合要求
注意if的使用,只是我自己没有想到的
需要尽量的避免多层的使用的嵌套
下面的方法只使用2个嵌套,组合有714个,答案一样

for a:=0;a<=20;a++{
        for b:=0;b<=33;b++{
            c:=100-a-b
                if c%3 == 0 && a*5+b*3+c/3 == 100 {
                    fmt.Println(a,b,c)

                }
                number++
            }
        }

跳转语句

break和continue个goto
break跳出循环,如果多层for循环,跳出最近的内循环
continue跳出本次循环,进入下个循环,只能在for循环使用
goto

    fmt.Println("aaaaaaaaaaaa")
    goto end
    fmt.Println("bbbbbbbbbb")
    end:
    fmt.Println("cccccccccccccc")
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容