5.3 for 语句

优质
小牛编辑
135浏览
2023-12-01

for语句

记得刚参加工作的时候,使用的语言主要是VB和Delphi,那个时候我大量使用 do while这种循环。后来主要使用PHP和Python,越来越多的使用for语句,甚至几乎不用while语句。现在,感觉其实while语句不是必须的,Go语言就没有while这种循环结构。要想在Go语言中执行循环语句只有for这一个结构。

一个for里面是一个代码块。

for循环体的几种写法:

for{
    //死循环相当于 while(1){}
}

for i<10{
    i +=1
}

for  i := 0; i < 10; i++ {
        //看这个是不是很像C语言了?
}

//重磅推荐下面的写法,相当于很多语言里面的foreach
//for range 结构
sunnyMap := map[string]int{"Mon": 0, "Tue": 1, "Wed": 2, "Thu": 3, "Fri": 4, "Sat": 5, "Sun": 6}

for key, value := range sunnyMap {
    fmt.Printf("%d->%s\r\n", key, value)
}

跳出循环使用break

sunnyMap := map[string]int{"Mon": 0, "Tue": 1, "Wed": 2, "Thu": 3, "Fri": 4, "Sat": 5, "Sun": 6}

for key, value := range sunnyMap {
    if key=="Thu"{
        break
    }
    fmt.Printf("%d->%s\r\n", key, value)
}

关键字 continue 忽略剩余的循环体而直接进入下一次循环的过程,但不是无条件执行下一次循环,执行之前依旧需要满足循环的判断条件。

sunnyMap := map[string]int{"Mon": 0, "Tue": 1, "Wed": 2, "Thu": 3, "Fri": 4, "Sat": 5, "Sun": 6}

for key, value := range sunnyMap {
    if key=="Thu"{
        continue
    }
    fmt.Printf("%d->%s\r\n", key, value)
}

大家注意对map进行遍历的时候尽量使用for range这中结构,因为map结构不是有序的。

用Go来解决经典数学问题——完数

    一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如 6=1+2+3.
    编程找出 10000 以内的所有完数。
    例如:
    6=1+2+3
    28=1+2+3+...+6+7
    496=1+2+3+...+30+31
    8128=1+2+3…+126+127
package main

import (
    "fmt"
)

func main() {
    for i := 1; i < 10000; i++ {
        sum := 0
        for j := 1; j < i; j++ {
            if i%j == 0 {
                sum += j
            }
        }
        if i == sum {
            fmt.Println(i)
        }
    }
}