```
feat(loop): 添加Go语言循环语句示例代码 新增完整的循环语句教学内容,包括: - for循环的基础用法和range遍历 - slice和map的遍历示例 - 九九乘法表实现 - 素数查找算法 - break和continue语句使用 - 标签(label)和goto语句演示 - 实际应用场景如成绩统计和数据清洗 同时更新README文件添加课程链接 ```
This commit is contained in:
parent
e802a2e4e9
commit
015e08a21d
@ -1 +1,5 @@
|
||||
# 循环语句
|
||||
# 循环语句
|
||||
|
||||
[课件](https://gitee.com/infraboard/go-course/blob/master/zh-cn/base/for.md)
|
||||
|
||||
|
||||
|
||||
162
day05/loop/main.go
Normal file
162
day05/loop/main.go
Normal file
@ -0,0 +1,162 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
)
|
||||
|
||||
func main() {
|
||||
arr01 := []int{1, 2, 3, 4, 5}
|
||||
// slices for
|
||||
for index, value := range arr01 {
|
||||
// 是值的副本,不能修改(改变不了外部的值, 不能修改这个值来修改array)
|
||||
fmt.Println(index, arr01[index])
|
||||
fmt.Println(value)
|
||||
|
||||
// 改变slice
|
||||
arr01[index] = 10
|
||||
}
|
||||
|
||||
m01 := map[string]int{"a": 1, "b": 2, "c": 3}
|
||||
// map for
|
||||
for key, value := range m01 {
|
||||
// 是值的副本,不能修改(改变不了外部的值, 不能修改这个值来修改map)
|
||||
fmt.Println(key, m01[key])
|
||||
fmt.Println(value)
|
||||
|
||||
// 修改map
|
||||
m01[key] = 10
|
||||
}
|
||||
|
||||
// n * m 乘法表
|
||||
// n 从1到9(乘数), m 从1到n(被乘数)
|
||||
for m := 1; m <= 9; m++ {
|
||||
// m: 1, n: 1
|
||||
// m: 2, n: 1, 2
|
||||
// m: 3, n: 1, 2, 3
|
||||
// m: 4, n: 1, 2, 3, 4
|
||||
// ...
|
||||
for n := 1; n <= m; n++ {
|
||||
fmt.Printf("%d×%d=%-2d ", n, m, m*n)
|
||||
}
|
||||
fmt.Println()
|
||||
}
|
||||
|
||||
fmt.Println("2-100之间的素数:")
|
||||
// 遍历 2 到 100
|
||||
for num := 2; num <= 100; num++ {
|
||||
isPrime := true // 假设是素数
|
||||
|
||||
// 检查能否被2到√num之间的数整除
|
||||
// 再通过循环检查 从2到num的数, 是否能整除(求模有没有余数: %); 9 (1 * 5, 2 *4, 3 * 3, 4 * 2, 5 * 1)
|
||||
for divisor := 2; divisor*divisor <= num; divisor++ {
|
||||
if num%divisor == 0 {
|
||||
isPrime = false
|
||||
break // 找到一个因数就可以退出了
|
||||
}
|
||||
}
|
||||
|
||||
if isPrime {
|
||||
fmt.Printf("%d ", num)
|
||||
}
|
||||
}
|
||||
fmt.Println()
|
||||
|
||||
// 不使用标签(GOTO):只跳出内层循环
|
||||
fmt.Println("---- 不使用标签 ----")
|
||||
for i := 1; i <= 3; i++ {
|
||||
fmt.Printf("外层: %d\n", i)
|
||||
for j := 1; j <= 3; j++ {
|
||||
fmt.Printf(" 内层: %d\n", j)
|
||||
if j == 2 {
|
||||
break // 只跳出内层循环
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 使用标签:跳出外层循环
|
||||
fmt.Println("---- 使用标签 ----")
|
||||
OuterLoop: // 定义标签 (定义程序的锚点,使用 goto或者break 跳转的锚点)
|
||||
for i := 1; i <= 3; i++ {
|
||||
fmt.Printf("外层: %d\n", i)
|
||||
for j := 1; j <= 3; j++ {
|
||||
fmt.Printf(" 内层: %d\n", j)
|
||||
if j == 2 {
|
||||
break OuterLoop // 跳出到标签处,即外层循环
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fmt.Println("---- 跳过偶数 ----")
|
||||
for i := 1; i <= 10; i++ {
|
||||
if i%2 == 0 {
|
||||
continue // 跳过偶数
|
||||
}
|
||||
fmt.Printf("%d ", i)
|
||||
}
|
||||
// 输出: 1 3 5 7 9
|
||||
|
||||
var count int = 1
|
||||
|
||||
LOOP: // 定义标签
|
||||
if count <= 5 {
|
||||
fmt.Printf("计数: %d\n", count)
|
||||
count++
|
||||
goto LOOP // 跳回标签
|
||||
}
|
||||
fmt.Println("结束")
|
||||
|
||||
fmt.Println("---- 统计学生成绩 ----")
|
||||
// 统计学生成绩
|
||||
scores := []int{85, 92, 78, 95, 88, 73, 90, 85, 79, 91}
|
||||
|
||||
var sum, max, min int
|
||||
max = scores[0]
|
||||
min = scores[0]
|
||||
|
||||
for _, score := range scores {
|
||||
sum += score
|
||||
if score > max {
|
||||
max = score
|
||||
}
|
||||
if score < min {
|
||||
min = score
|
||||
}
|
||||
}
|
||||
|
||||
average := float64(sum) / float64(len(scores))
|
||||
fmt.Printf("平均分: %.2f\n", average)
|
||||
fmt.Printf("最高分: %d\n", max)
|
||||
fmt.Printf("最低分: %d\n", min)
|
||||
|
||||
fmt.Println("---- 清洗用户输入的电话号码列表 ----")
|
||||
// 清洗用户输入的电话号码列表
|
||||
phoneNumbers := []string{"138-1234-5678", "159-xxxx-9999", "186-8888-8888", "invalid", "177-9999-0000"}
|
||||
|
||||
validPhones := []string{}
|
||||
for _, phone := range phoneNumbers {
|
||||
// 简单验证:长度为13,包含两个短横线
|
||||
if len(phone) != 13 {
|
||||
continue // 跳过无效号码
|
||||
}
|
||||
if phone[3] != '-' || phone[8] != '-' {
|
||||
continue
|
||||
}
|
||||
|
||||
// 判断所有字符都是数字,不是字母
|
||||
if !IsNumber(phone[:3]) || !IsNumber(phone[4:8]) || !IsNumber(phone[9:13]) {
|
||||
continue
|
||||
}
|
||||
validPhones = append(validPhones, phone)
|
||||
}
|
||||
|
||||
fmt.Printf("有效电话号码: %v\n", validPhones)
|
||||
}
|
||||
|
||||
func IsNumber(s string) bool {
|
||||
for _, char := range s {
|
||||
if char < '0' || char > '9' {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user