【韩顺平Go核心编程】练习题(二)


开发平台

开发工具:VSCode
Go版本:1.21.7 Winsows 64位


一、String转基本数据类型

代码:

package main

import (
	"fmt"
	"strconv"
)

func main() {
	var str string = "true"
	var b bool
	//1. strconv.ParseBool(str)函数会返回两个值(value bool, err error)
	//2. 因为这里只需要获取value bool,不想获取err,所以使用 _ 忽略
	b, _ = strconv.ParseBool(str)
	fmt.Printf("b type %T b=%v\n", b, b)

	var str2 string = "123456789"
	var n1 int64
	var n2 int
	n1, _ = strconv.ParseInt(str2, 10, 64)
	n2 = int(n1)
	fmt.Printf("n1 type %T n1=%v\n", n1, n1)
	fmt.Printf("n2 type %T n2=%v\n", n2, n2)

	var str3 string = "123.456"
	var f1 float64
	f1, _ = strconv.ParseFloat(str3, 64)
	fmt.Printf("f1 type %T f1=%v\n", f1, f1)

	//当string类型无法转成有效数据,回返回对应类型的默认值
	var str4 string = "hello"
	var n3 int64
	n3, _ = strconv.ParseInt(str4, 10, 64)
	fmt.Printf("n3 type %T n3=%v\n", n3, n3)

	//当int64被赋值时,若string无法顺利转成int64,仍会被置为默认值
	var n4 int64 = 11
	n4, _ = strconv.ParseInt(str4, 10, 64)
	fmt.Printf("n4 type %T n4=%v\n", n4, n4)

}

运行结果:


二、运算符

1. 算数运算符

package main

import "fmt"

func main() {
	//说明,如果运算的数都是整数,那么除后,去掉小数部分,保留整数部分
	fmt.Println(10 / 4) // =2

	var n1 float32 = 10 / 4
	fmt.Println(n1) // =2

	//如果希望保留小数部分,则需要浮点数参与运算
	var n2 float32 = 10.0 / 4
	fmt.Println(n2) // =2.5
}

2. 取模

package main

import "fmt"

func main() {
	//公式:a % b = a - (a / b) * b
	fmt.Println("10%3=", 10 % 3) // =1
	fmt.Println("-10%3=", -10 % 3) // =-1
	fmt.Println("10%-3=", 10 % -3) // =1
	fmt.Println("-10%-3=", -10 % -3) // =-1
}

3. 赋值运算符

要求:有两个变量,a和b,要求将其进行交换,但是不允许使用中间变量。

package main

import "fmt"

func main() {
	var a int = 10
	var b int = 20
	
	a = a + b
	b = a - b
	a = a - b
	
	fmt.Printf("a=%v b=%v", a,b)
}


三、switch

1. case后面可跟多个表达式

package main

import (
	"fmt"
)

func main() {
	var n1 int32 = 51
	var n2 int32 = 20
	var n3 int32 = 5
	switch n1 {
	case n2, 10, 5: // case后面可以有多个表达式
		fmt.Println("ok1")
	case n3: // 若直接写成 case 5,则会报错
		fmt.Println("ok2")
	}
}

2. switch后可以不带表达式

package main

import (
	"fmt"
)

func main() {
	// switch后可以不带表达式,类似 if --else分支来使用
	var age int = 10
	switch{
		case age == 10:
			fmt.Println("age == 10")
		case age == 20:
			fmt.Println("age == 20")
		default:
			fmt.Println("没有匹配到")
	}
}

3. switch后可直接声明/定义一个变量,分号结束

package main

import (
	"fmt"
)

func main() {
	switch grade := 90; {
		case grade > 90:
			fmt.Println("成绩优秀")
		case grade >= 70 && grade <= 90:
			fmt.Println("成绩优良")
		case grade >= 60 && grade <= 70:
			fmt.Println("成绩及格")
		default:
			fmt.Println("不及格")
	}
}

4. switch穿透 fallthrough

package main

import (
	"fmt"
)

func main() {
	var num int32 = 10
	switch num {
	case 10:
		fmt.Println("ok1")
		fallthrough // 默认只能穿透一层,会穿透到下一层,输出“ok1”和“ok2”
	case 20:
		fmt.Println("ok2")
	default:
		fmt.Println("没有匹配到")
	}
}

四、for-range

package main

import "fmt"

func main() {
	str := "hello world!"
	for index, val := range str {
		fmt.Printf("index=%d, val=%c \n", index, val)
	}
}

五、空心金字塔

代码:

package main

import "fmt"

func main() {
	var totalLevel int = 10

	// i 表示层数
	for i := 1; i <= totalLevel; i++ {
		// 在打印前先输出空格
		for k := 1; k <= totalLevel-i; k++ {
			fmt.Print(" ")
		}

		// j表示每层打印多少*
		for j := 1; j <= 2*i-1; j++ {
			if j == 1 || j == 2*i-1 || i == totalLevel {
				fmt.Print("*")
			} else {
				fmt.Print(" ")
			}
		}
		fmt.Println()
	}
}

运行结果:
在这里插入图片描述

  • 14
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值