day03 流程控制

染指未来發表於2024-07-02

前言

流程控制:

  • 分支判斷
    • if ; else if ; else
    • switch case
    • select : channel
  • 迴圈
    • for
    • go to 跳轉,當條件成立跳 某個地方執行 todo。

if

package main

import "fmt"

func main() {
	/*
		流程控制:
			- 分支判斷
				- if  ; else if ; else
				- switch case
				- select  : channel

			- 迴圈
				- for
				- go to  跳轉,當條件成立跳 某個地方執行 todo。

	*/
	// if 條件判斷
	var num int = 15
	if num > 100 {
		fmt.Println("num > 100")
	} else if num < 0 {
		fmt.Println("num < 100")
	} else {
		fmt.Println("0 < num < 100")
	}

	// 練習 if 密碼判斷. 輸入兩次密碼,第一次成功,第二次輸入則二次校驗,否則使用者密碼校驗失敗
	fmt.Println("請輸入使用者名稱和密碼:")
	// scan 阻塞等待
	var username string
	var password1 string
	var password2 string
	fmt.Scan(&username)
	fmt.Scan(&password1)

	if password1 == "123" && username == "admin" {
		fmt.Println("請再次輸入密碼:")
		fmt.Scan(&password2)
		if password2 == "123" {
			fmt.Println("密碼校驗成功")
		} else {
			fmt.Println("密碼二次校驗失敗!")

		}
	} else {
		fmt.Println("密碼校驗失敗!")
	}

	// switch case 條件判斷
	var num2 int = 2
	switch num2 {
	case 1:
		fmt.Println("num2: 1")
	case 2:
		fmt.Println("num2: 2")

	}
}

多條件 if

package main

import "fmt"

func main() {
	// 分數校驗
	fmt.Println("請輸入你的成績:")

	var score int = 60
	fmt.Scan(&score)
	if score >= 90 && score <= 100 {
		fmt.Println("A")
	} else if score >= 80 && score <= 90 {
		fmt.Println("B")
	} else if score >= 70 && score <= 80 {
		fmt.Println("C")
	} else if score >= 60 && score <= 70 {
		fmt.Println("D")
	} else if score >= 0 && score <= 60 {
		fmt.Println("E")
	} else {
		fmt.Println("輸入不合法!")
	}
}

switch case

package main

import "fmt"

func main() {
	/* switch case default*/
	// case 可以寫多個條件

	var score int = 61

	switch score {
	case 100:
		fmt.Println("A")
	case 90:
		fmt.Println("B")
	case 80:
		fmt.Println("C")
	case 70:
		fmt.Println("D")
	case 60, 61:
		fmt.Println("E")
	default:
		fmt.Println("未知數")
	}

	// switch 省略條件。 預設 條件 真true
	switch {
	case false:
		fmt.Println("false")
	case true:
		fmt.Println("true")
	default:
		fmt.Println("default")
	}
}

switch case fallthrough


// fallthrough 擊穿switch case。 理解:一旦使用 fallthrough ,則會強制執行下面的case語句
// 場景: 中斷case判斷。 使用極少!!!
a := false
switch a {
case false:
    fmt.Println("fallthrough1")
    fallthrough
case true:
    fmt.Println("fallthrough2")
default:
    fmt.Println("fallthrough3")
}

switch case break

// switch  break. 中斷後續判定
b := false
switch b {
case false:
    fmt.Println("break1")
    if b == false {
        break
    }
case true:
    fmt.Println("brea2")
default:
    fmt.Println("break3")
}

for 迴圈

  • 終止迴圈
    • break : 結束整個迴圈,立即停止
    • continue :結束當前這次迴圈,繼續進行下一次迴圈
package main

import "fmt"

func main() {
	/* go 中的迴圈 */
	// for 起始init,結束end,條件condition,自增/自減
	num := 0
	for i := 0; i <= 10; i++ {
		num += i
		fmt.Println("each num and i:", num, i)

	}
	fmt.Println("num count:", num)

	// for break continue
	for i := 0; i < 10; i++ {
		if i == 5 {
			fmt.Println("break:終止,i:", i)
			break
		}
		if i == 3 {
			fmt.Println("contiune: 跳過,i:", i)
			continue
		}
		fmt.Println("迴圈輸出 i:", i)
	}

	// for range 迴圈可迭代資料結構:陣列,字串,字典...
	for i, i2 := range "hello word" {
		fmt.Println("下標:", i, "列印字元:", i2)
	}

	// for 作業 列印 5 * 5 的 矩陣:
	for i := 0; i < 6; i++ {
		for j := 0; j < 6; j++ {
			fmt.Print("* ")
		}
		fmt.Println()
	}

	// 死迴圈: for {}
	for {
		fmt.Println("Hello go")
	}
}

go for 列印菱形

package main

import "fmt"

func main() {

	// for 作業

	// 1. 9 * 9 乘法口訣表

	for i := 1; i < 10; i++ {
		for j := 1; j < 10; j++ {
			if j <= i {
				fmt.Printf("%d * %d = %d ; ", j, i, i*j)
			}
		}
		fmt.Println()
	}

	// 2. 菱形

	for i := 1; i < 6; i++ {
		for j := 1; j <= 6-i; j++ {
			fmt.Print(" ")
		}
		for j := 0; j < 2*i-1; j++ {
			fmt.Print("*")
		}
		fmt.Println()

	}
	for i := 4; i >= 1; i-- {
		for j := 1; j <= 6-i; j++ {
			fmt.Print(" ")
		}
		for j := 0; j < 2*i-1; j++ {
			fmt.Print("*")
		}
		fmt.Println()

	}
}