【入门】Go语言for循环
目录
一、for循环基本结构
1.1 for循环
语法:
for 初始化变量; 条件判断; 修正变量 {
循环体
}
案例:打印十遍,今晚不熬夜
package main
import "fmt"
func main() {
for i := 0; i < 10; i++ {
fmt.Println("今晚不熬夜")
}
}
代码输出内容:
今晚不熬夜
今晚不熬夜
今晚不熬夜
今晚不熬夜
今晚不熬夜
今晚不熬夜
今晚不熬夜
今晚不熬夜
今晚不熬夜
今晚不熬夜
案例:求1-100之间所有数字的和
package main
import "fmt"
func main() {
sum := 0
for i := 1; i <= 100; i++ {
sum += i
}
fmt.Println(sum)
}
代码输出内容:
5050
案例:求1-100之间偶数的和
package main
import "fmt"
func main() {
sum := 0
for i := 1; i <= 100; i++ {
if i%2 == 0 {
sum += i
}
}
fmt.Println(sum)
}
代码输出内容:
2550
1.2 for range循环
for range方便变量数组、字符串
案例:
package main
import "fmt"
func main() {
str := "hello,world,to,北京"
for index, val := range str {
fmt.Printf("index=%d,val=%c\n", index, val)
}
}
代码输出内容:
index=0,val=h
index=1,val=e
index=2,val=l
index=3,val=l
index=4,val=o
index=5,val=,
index=6,val=w
index=7,val=o
index=8,val=r
index=9,val=l
index=10,val=d
index=11,val=,
index=12,val=t
index=13,val=o
index=14,val=,
index=15,val=北
index=18,val=京
如果不使用index 可以使用 '_' 代替,可以理解为占位符
package main
import "fmt"
func main() {
str := "hello,world,to,北京"
for _, val := range str {
fmt.Printf("val=%c\n", val)
}
}
代码输出结果:
val=h
val=e
val=l
val=l
val=o
val=,
val=w
val=o
val=r
val=l
val=d
val=,
val=t
val=o
val=,
val=北
val=京
二、break、continue、goto语句
2.1 break语句
break 跳出当前循环
案例:无限循环,使用 break 跳出循环
package main
import (
"fmt"
)
func main() {
i := 1
for {
if i <= 10 {
fmt.Println("OK", i)
} else {
break // 如果i不大于10 则跳出循环
}
i++
}
}
代码输出内容:
OK 1
OK 2
OK 3
OK 4
OK 5
OK 6
OK 7
OK 8
OK 9
OK 10
案例:要求用户输入用户名和密码,只要不是admin、666666就一直提示用户,密码错误,请重新输入
package main
import (
"fmt"
)
func main() {
var user string
var password string
var count int = 1
for {
fmt.Println("请输入用户名:")
fmt.Scan(&user)
fmt.Println("请输入密码:")
fmt.Scan(&password)
// 最多错误输入3次
if count >= 3 {
break
}
if user == "admin" && password == "666666" {
fmt.Print("系统登入成功~")
break
} else if user == "admin" {
fmt.Println("密码错误")
count += 1
} else if password == "666666" {
fmt.Println("账号不存在")
count += 1
} else {
fmt.Println("账号密码错误")
count += 1
}
}
}
代码输出内容:
请输入用户名:
admin
请输入密码:
434343
密码错误
请输入用户名:
admin
请输入密码:
666666
系统登入成功~
2.2 continue语句
结束本轮循环,然后进行条件判断,如果成立则进入下一轮循环,否则退出循环
案例:输出数字1-5 除3外
package main
import (
"fmt"
)
func main() {
for i := 1; i <= 5; i++ {
if i == 3 {
continue
}
fmt.Println(i)
}
}
代码输出内容:
1
2
4
5
案例:计算1-100之间除了能被7整除之外的所有整数的和
package main
import (
"fmt"
)
// 计算1-100之间除了能被7整除之外的所有整数的和
func main() {
var sum int
for i := 1; i <= 100; i++ {
if i%7 == 0 {
continue
}
sum += i
}
fmt.Println(sum)
}
代码输出内容:
4315
continue跳出标签循环
案例:
package main
import "fmt"
func main() {
here:
for i := 0; i < 5; i++ {
for j := 0; j < 5; j++ {
if j == 3 {
continue here
}
fmt.Println("i=", i, "j=", j)
}
}
}
代码执行结果:
i= 0 j= 0
i= 0 j= 1
i= 0 j= 2
i= 1 j= 0
i= 1 j= 1
i= 1 j= 2
i= 2 j= 0
i= 2 j= 1
i= 2 j= 2
i= 3 j= 0
i= 3 j= 1
i= 3 j= 2
i= 4 j= 0
i= 4 j= 1
i= 4 j= 2
2.3 goto
Go语言的goto语句可以无条件的转移到程序中指定的行
案例:
package main
import (
"fmt"
)
func main() {
var n int = 30
fmt.Println("OK1")
if n > 2 {
goto label1
}
fmt.Println("OK2")
fmt.Println("OK3")
fmt.Println("OK4")
label1:
fmt.Println("OK5")
fmt.Println("OK6")
fmt.Println("OK7")
}
代码执行结果:
OK1
OK5
OK6
OK7
三、嵌套循环
for循环中嵌套for循环
案例:打印久久乘法表
package main
import (
"fmt"
)
func main() {
for j := 1; j <= 9; j++ {
for i := 1; i <= 9; i++ {
fmt.Printf("%d * %d = %d\t", j, i, j*i)
}
fmt.Printf("\n")
}
}
代码输出内容:
1 * 1 = 1 1 * 2 = 2 1 * 3 = 3 1 * 4 = 4 1 * 5 = 5 1 * 6 = 6 1 * 7 = 7 1 * 8 = 8 1 * 9 = 9
2 * 1 = 2 2 * 2 = 4 2 * 3 = 6 2 * 4 = 8 2 * 5 = 10 2 * 6 = 12 2 * 7 = 14 2 * 8 = 16 2 * 9 = 18
3 * 1 = 3 3 * 2 = 6 3 * 3 = 9 3 * 4 = 12 3 * 5 = 15 3 * 6 = 18 3 * 7 = 21 3 * 8 = 24 3 * 9 = 27
4 * 1 = 4 4 * 2 = 8 4 * 3 = 12 4 * 4 = 16 4 * 5 = 20 4 * 6 = 24 4 * 7 = 28 4 * 8 = 32 4 * 9 = 36
5 * 1 = 5 5 * 2 = 10 5 * 3 = 15 5 * 4 = 20 5 * 5 = 25 5 * 6 = 30 5 * 7 = 35 5 * 8 = 40 5 * 9 = 45
6 * 1 = 6 6 * 2 = 12 6 * 3 = 18 6 * 4 = 24 6 * 5 = 30 6 * 6 = 36 6 * 7 = 42 6 * 8 = 48 6 * 9 = 54
7 * 1 = 7 7 * 2 = 14 7 * 3 = 21 7 * 4 = 28 7 * 5 = 35 7 * 6 = 42 7 * 7 = 49 7 * 8 = 56 7 * 9 = 63
8 * 1 = 8 8 * 2 = 16 8 * 3 = 24 8 * 4 = 32 8 * 5 = 40 8 * 6 = 48 8 * 7 = 56 8 * 8 = 64 8 * 9 = 72
9 * 1 = 9 9 * 2 = 18 9 * 3 = 27 9 * 4 = 36 9 * 5 = 45 9 * 6 = 54 9 * 7 = 63 9 * 8 = 72 9 * 9 = 81
案例:打印久久乘法表(矩形)
package main
import (
"fmt"
)
func main() {
for j := 1; j <= 9; j++ {
for i := 1; i <= j; i++ {
fmt.Printf("%d * %d = %d\t", j, i, j*i)
}
fmt.Printf("\n")
}
}
代码输出内容:
1 * 1 = 1
2 * 1 = 2 2 * 2 = 4
3 * 1 = 3 3 * 2 = 6 3 * 3 = 9
4 * 1 = 4 4 * 2 = 8 4 * 3 = 12 4 * 4 = 16
5 * 1 = 5 5 * 2 = 10 5 * 3 = 15 5 * 4 = 20 5 * 5 = 25
6 * 1 = 6 6 * 2 = 12 6 * 3 = 18 6 * 4 = 24 6 * 5 = 30 6 * 6 = 36
7 * 1 = 7 7 * 2 = 14 7 * 3 = 21 7 * 4 = 28 7 * 5 = 35 7 * 6 = 42 7 * 7 = 49
8 * 1 = 8 8 * 2 = 16 8 * 3 = 24 8 * 4 = 32 8 * 5 = 40 8 * 6 = 48 8 * 7 = 56 8 * 8 = 64
9 * 1 = 9 9 * 2 = 18 9 * 3 = 27 9 * 4 = 36 9 * 5 = 45 9 * 6 = 54 9 * 7 = 63 9 * 8 = 72 9 * 9 = 81
四、综合案例练习
4.1 案例一
案例需求:2006年营业额80000元,每年增长25%,请问按此增长速度,哪一年营业额将达到20万元。
package main
import "fmt"
func main() {
// 2006年营业额80000元,每年增长25%,请问按此增长速度,哪一年营业额将达到20万元
var year int = 2006
var money float64
for money = 80000; money <= 200000; money = money * 1.25 {
year += 1
}
fmt.Println(year)
}
代码输出内容:
2011
4.2 案例二
案例需求:找出100-999间的水仙花数
水仙花:是指一个三位数,它的每位数字的立方和等于其本身
package main
import "fmt"
func main() {
var h int //百位 1.53
var t int //十位
var b int //个位
for i := 100; i <= 999; i++ {
h = i / 100
t = i % 100 / 10
b = i % 10
if h*h*h+t*t*t+b*b*b == i {
fmt.Println(i)
}
}
}
代码输出内容:
153
370
371
407