【入门】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
posted @ 2023-03-27 20:13  乱七八糟博客备份  阅读(56)  评论(0编辑  收藏  举报