首页 > 其他分享 >Golang 百题(实战快速掌握语法)_3

Golang 百题(实战快速掌握语法)_3

时间:2024-07-17 10:56:18浏览次数:11  
标签:百题 语法 fmt Golang func go main 代码 math

目录

是否包含空格

知识点

运行程序

总结

替换指定范围的字符

知识点

运行程序

总结

返回最大值

知识点

运行程序

总结

反转字符串

知识点

运行程序

总结

创建 set 类型

知识点

运行程序

总结

将度转换为弧度

知识点

运行程序

总结

限制数

知识点

运行程序

总结

二的幂

知识点

运行程序

总结

判断给定的是否为奇数

知识点

运行程序

总结

填充字符串

挑战介绍

挑战内容

挑战要求

参考代码

代码分析:


是否包含空格

本实验我们将实现通过正则表达式来判断给定的字符串是否包含空格。

知识点
  • 正则表达式
适合人群

本课程属于基础课程。需要用户掌握 Go 语言编程基础知识、计算机基础知识和 Linux 环境的基本用法。

许可证

内容编译来自 psampaz30s-seconds-of-golang 的开源项目,它们分别使用 CC BY-SA 4.0 LicenseCC0-1.0 License,为了能够适合实验楼在线环境,我们修改了部分解题和单元测试代码。

代码实例

对于判断给定的字符串是否包含空格,我们可以使用 regexp 包下的函数来实现,下面是一个例子。

package main

import (
    "fmt"
    "regexp"
)

func ContainsWhiteSpace(str string) bool {
    re := regexp.MustCompile(`\s`)
    return re.MatchString(str)
}
func main() {
    r1 := ContainsWhiteSpace("lorem")       // false
    r2 := ContainsWhiteSpace("lorem ipsum") // true
    fmt.Println(r1, r2)
}

该程序的功能:

  • 使用 regexp.MustCompile 来安全初始化正则表达式。
  • 使用 Regexp.MatchString()函数来判断给定的字符串是否包含空格。

将代码保存为/home/project/containsWhiteSpace.go文件。

运行程序

打开 WebIDE 的 Terminal 终端,输入以下命令查看输出:

go run containsWhiteSpace.go

图片描述

总结

本实验我们学习了如何使用正则表达式来匹配空格,正则表达式在日常学习中是一个非常有用的工具,下个实验我们将学习如何替换字符串。

替换指定范围的字符

本实验我们将通过 strings.Repeat()函数来用指定的掩码字符替换最后 n 个字符以外的所有字符。

知识点
  • strings.Repeat
适合人群

本课程属于基础课程。需要用户掌握 Go 语言编程基础知识、计算机基础知识和 Linux 环境的基本用法。

许可证

内容编译来自 psampaz30s-seconds-of-golang 的开源项目,它们分别使用 CC BY-SA 4.0 LicenseCC0-1.0 License,为了能够适合实验楼在线环境,我们修改了部分解题和单元测试代码。

代码实例

Go 语言 Strings 包下的 Repeat 函数可以对输入的字符串和范围进行替换,语法如下:

func Repeat(s string, count int) string

下面我们将使用 Repeat 函数来用指定的掩码字符替换最后 n 个字符以外的所有字符。下面是一个例子。

package main

import (
    "fmt"
    "strings"
)

func Mask(cc string, n int, m rune) string {
    return strings.Repeat(string(m), len(cc)-n) + cc[len(cc)-n:]
}
func main() {
    r := Mask("1234567890", 4, '*') // "******7890"
    fmt.Println(r)
}

该程序的功能:

  • 使用输入的参数对字符串进行切片。
  • 使用 strings.Repeat()来对函数进行替换。

将代码保存为/home/project/mask.go文件。

运行程序

打开 WebIDE 的 Terminal 终端,输入以下命令查看输出:

go run mask.go

图片描述

总结

本实验我们学习了如何使用 strings 包下的 Repeat 来进行替换字符,下个实验我们将学习如何返回最大值。

返回最大值

求最大值是一个经典问题,在 Go 中我们可以使用 math 下的函数快速的解决问题。本实验我们将讲解用这些函数求取最大值。

知识点
  • math.Inf
  • math.Max
适合人群

本课程属于基础课程。需要用户掌握 Go 语言编程基础知识、计算机基础知识和 Linux 环境的基本用法。

许可证

内容编译来自 psampaz30s-seconds-of-golang 的开源项目,它们分别使用 CC BY-SA 4.0 LicenseCC0-1.0 License,为了能够适合实验楼在线环境,我们修改了部分解题和单元测试代码。

代码实例

下面我们将使用 math 包下的函数来求给定数字切片的最大值,该程序使用了 math 包下的 Inf 和 Max 函数,math.Inf 函数的参数如果大于等于 0,则将正无穷大作为返回值,如果小于 0,则将负无穷大作为返回值。而 math.Max()函数则返回两个浮点数的最大值。下面具体的使用代码。

package main

import (
    "fmt"
    "math"
)

func MaxOf(nums ...float64) float64 {
    max := math.Inf(-1)
    for _, num := range nums {
        max = math.Max(num, max)
    }
    return max
}
func main() {
    r := MaxOf(3.0, 4.0, 2.0)
    fmt.Println(r)
}

该程序的功能:

  • 使用math.Inf(-1)将初始最大值设置为负无穷大。
  • 使用 range 和 math.Max()来遍历每个值并且判断是否是最大值。

将代码保存为/home/project/maxOf.go文件。

运行程序

打开 WebIDE 的 Terminal 终端,输入以下命令查看输出:

go run maxOf.go

图片描述

总结

本实验我们学习了如何使用 math.Inf 初始化最大值以及判断最大值的方法,下个实验我们将学习如何反转指定范围的字符串。

反转字符串

本实验中,我们输入一个字符串,然后实现返回反转后的字符串。

知识点
  • for
  • make
  • 转换字符串
适合人群

本课程属于基础课程。需要用户掌握 Go 语言编程基础知识、计算机基础知识和 Linux 环境的基本用法。

许可证

内容编译来自 psampaz30s-seconds-of-golang 的开源项目,它们分别使用 CC BY-SA 4.0 LicenseCC0-1.0 License,为了能够适合实验楼在线环境,我们修改了部分解题和单元测试代码。

代码实例

反转字符串我们可以使用 for 循环加切片来实现,下面是一个例子。

package main

import (
    "fmt"
)

func ReverseString(s string) string {
    o := make([]rune, len(s))
    for i, c := range s {
        o[len(s)-i-1] = c
    }
    return string(o)
}
func main() {
    r := ReverseString("hello") // "olleh"
    fmt.Println(r)
}

该程序的功能:

  • 使用 make 来生成一个 rune 类型的切片。
  • 使用 range 和 len 函数来倒序遍历字符串然后将值添加到结果中。
  • 使用 string()来将 rune 切片转为字符串。

将代码保存为/home/project/reverseString.go文件。

运行程序

打开 WebIDE 的 Terminal 终端,输入以下命令查看输出:

go run reverseString.go

图片描述

总结

本实验我们学习了如何使用 for range 来达到反转字符串的方法,下一个实验我们将学习如何创建 set 类型。

创建 set 类型

Map 的键是一个无序的集合,如果忽略 map 的值,那么 map 就可以作为一个 set。本实验我们将学习如何使用 map 来创建一个 set 类型。

知识点
  • map
  • key
  • value
  • struct
适合人群

本课程属于基础课程。需要用户掌握 Go 语言编程基础知识、计算机基础知识和 Linux 环境的基本用法。

许可证

内容编译来自 psampaz30s-seconds-of-golang 的开源项目,它们分别使用 CC BY-SA 4.0 LicenseCC0-1.0 License,为了能够适合实验楼在线环境,我们修改了部分解题和单元测试代码。

代码实例

最省空间的方式是声明一个空结构作为值,下面是一个例子。

package main

import "fmt"

func main() {
    set := make(map[string]struct{})
    fmt.Println(set)

    set["a"] = struct{}{}
    set["b"] = struct{}{}
    set["c"] = struct{}{}
    fmt.Println(set)

    if _, exists := set["a"]; exists {
        fmt.Println("a exists in the set")
    }

    delete(set, "b")
    fmt.Println(set)
    // Output:
    // map[]
    // map[a:{} b:{} c:{}]
    // a exists in the set
    // map[a:{} c:{}]
}

该程序的功能:

  • 添加一个新的元素到 set 中。
  • 判断元素在 set 中是否存在。
  • 在 set 中删除一个元素

将代码保存为/home/project/createSet.go文件。

运行程序

打开 WebIDE 的 Terminal 终端,输入以下命令查看输出:

go run createSet.go

图片描述

总结

本实验我们学习了如何使用 map 来创建一个 set 类型,下个实验我们讲学习如何把度转换为弧度。

将度转换为弧度

本实验我们将学习如何将度转换为弧度。

知识点
  • math.Pi
适合人群

本课程属于基础课程。需要用户掌握 Go 语言编程基础知识、计算机基础知识和 Linux 环境的基本用法。

许可证

内容编译来自 psampaz30s-seconds-of-golang 的开源项目,它们分别使用 CC BY-SA 4.0 LicenseCC0-1.0 License,为了能够适合实验楼在线环境,我们修改了部分解题和单元测试代码。

代码实例

下面我们使用 math.Pi 常量和转换公式来将度转换为弧度,下面是一个例子。

package main

import (
    "fmt"
    "math"
)

func Rads(d float64) float64 {
    return d * math.Pi / 180.0
}
func main() {
    r := Rads(90.0) // ~1.5708
    fmt.Println(r)
}

该程序的功能:

  • 使用 math.Pi 和度数作为参数传入弧度公式,将度数转换为弧度。

将代码保存为/home/project/rads.go文件。

运行程序

打开 WebIDE 的 Terminal 终端,输入以下命令查看输出:

go run rads.go

图片描述

总结

本实验我们使用运算公式以及 Math.Pi 常量来将度转换为弧度。Golang 中同样还有 E 的常量 Math.E 和 Pi 的平方根 Math.SqrtPi 等等,下个实验我们将学习如何实现限制数。

限制数

限制数指的是如果输入的数在给定的范围内,则返回该数,否则返回离该数范围最近的范围数。本实验中我们将学习如何获得限制数。

知识点
  • math.Max()
  • math.Min()
适合人群

本课程属于基础课程。需要用户掌握 Go 语言编程基础知识、计算机基础知识和 Linux 环境的基本用法。

许可证

内容编译来自 psampaz30s-seconds-of-golang 的开源项目,它们分别使用 CC BY-SA 4.0 LicenseCC0-1.0 License,为了能够适合实验楼在线环境,我们修改了部分解题和单元测试代码。

代码实例

下面是一个例子。

package main

import (
    "fmt"
    "math"
)

func Clamp(n, a, b float64) float64 {
    return math.Max(math.Min(n, math.Max(a, b)), math.Min(a, b))
}
func main() {
    r1 := Clamp(2.0, 3.0, 5.0)   // 3.0
    r2 := Clamp(1.0, -1.0, -5.0) // -1.0
    fmt.Println(r1, r2)
}

该程序的功能:

  • 在函数Clamp(n, a, b float64)中如果 n 在 a-b 的范围内,则返回 n。
  • 否则返回 ab 中最接近 n 的值。

将代码保存为/home/project/clamp.go文件。

运行程序

打开 WebIDE 的 Terminal 终端,输入以下命令查看输出:

go run clamp.go

图片描述

总结

本实验我们学习了如何获得限制数,下个实验我们将判断给定的数字是否为二的幂。

二的幂

求解给定的数字是否为二的幂,本实验中我们将使用 AND 运算符来判断。

知识点
  • AND 运算符
适合人群

本课程属于基础课程。需要用户掌握 Go 语言编程基础知识、计算机基础知识和 Linux 环境的基本用法。

许可证

内容编译来自 psampaz30s-seconds-of-golang 的开源项目,它们分别使用 CC BY-SA 4.0 LicenseCC0-1.0 License,为了能够适合实验楼在线环境,我们修改了部分解题和单元测试代码。

代码实例

通过判断二进制下 n 和 n-1 的按位与,我们可以判断该数是否为二的幂,下面是具体的代码。

package main

import (
    "fmt"
)

func IsPowerOf2(n int) bool {
    return n > 0 && (n&(n-1)) == 0
}
func main() {
    r1 := IsPowerOf2(0) // false
    r2 := IsPowerOf2(1) // true
    r3 := IsPowerOf2(8) // true
    fmt.Println(r1, r2, r3)
}

该程序的功能:

  • 使用按位二进制 AND 运算符(&)来确定 n 是否为 2 的幂。此外检查 n 是否为零。

将代码保存为/home/project/isPowerOf2.go文件。

运行程序

打开 WebIDE 的 Terminal 终端,输入以下命令查看输出:

go run isPowerOf2.go

图片描述

总结

本实验我们学习了使用 AND 运算符来判断给定的数字是否是二的幂,下个实验我们将判断给定的是否为奇数。

判断给定的是否为奇数

本实验我们将学习通过模运算来判断给定的是否为奇数。

知识点
  • 模运算
适合人群

本课程属于基础课程。需要用户掌握 Go 语言编程基础知识、计算机基础知识和 Linux 环境的基本用法。

许可证

内容编译来自 psampaz30s-seconds-of-golang 的开源项目,它们分别使用 CC BY-SA 4.0 LicenseCC0-1.0 License,为了能够适合实验楼在线环境,我们修改了部分解题和单元测试代码。

代码实例

当给定数字与 2 的模为 1 时,我们就说该数字为奇数,下面是一个例子。

package main

import (
    "fmt"
)

func IsOdd(n int) bool {
    if n < 0 {
        n *= -1
    }
    return n%2 == 1
}
func main() {
    r := IsOdd(3) // true
    fmt.Println(r)
}

该程序的功能:

  • 找使用模运算符%来判断给定的数字能否得到整除。

将代码保存为/home/project/isOdd.go文件。

运行程序

打开 WebIDE 的 Terminal 终端,输入以下命令查看输出:

go run isOdd.go

图片描述

总结

本实验我们学习了如何判断给定的数字为奇数,下个实验我们将挑战填充字符串。

填充字符串

挑战介绍

填充字符串为指定长度

挑战内容

本次挑战中,给定一个字符串 s 和长度 l,要求填充字符串长度为 l,填充字符为空格,且右对齐。如初始字符串为"go",长度为 8,则输出字符串为" go"。

挑战要求

  • 请自行在环境主目录/home/project下新建 pad_left.go 文件,并复制示例代码到文件中完成补充。补充完整后点击「提交检测」,系统将会给出判定结果。

图片描述

示例代码

package main

import (
    "fmt"
)

func PadLeft(s string, l int) string {
    // 待补充代码
}
func main() {
    r := PadLeft("go", 8) // "      go"
    fmt.Println(r)
}

小贴士

  • 为了保证能被系统准确检测,挑战中的每一句话都非常重要,请仔细阅读。跳跃式浏览易导致挑战无法按要求通过。
参考代码

以下内容仅供参考,为了能有更好的学习效果,请尽量按自己的想法来完成挑战。

package main

import (
    "fmt"
    "strconv"
)

func PadLeft(s string, l int) string {
    f := "%" + strconv.Itoa(l) + "v"
    return fmt.Sprintf(f, s)
}
func main() {
    r := PadLeft("go", 8) // "      go"
    fmt.Println(r)
}

代码分析:

上述代码实现了一个PadLeft函数,它接收一个字符串s和一个整数l作为参数,通过构造特定的格式化字符串并使用fmt.Sprintf函数,实现了将字符串s左填充到指定长度l的功能。其中,格式化字符串中的v动词表示按照值的默认格式输出,即直接输出字符串内容,不进行特殊格式化。

版权说明

内容编译来自 psampaz30s-seconds-of-golang 的开源项目,它们分别使用 CC BY-SA 4.0 LicenseCC0-1.0 License,为了能够适合实验楼在线环境,我们修改了部分解题和单元测试代码。

标签:百题,语法,fmt,Golang,func,go,main,代码,math
From: https://blog.csdn.net/qq_57737836/article/details/140408472

相关文章

  • golang 实现负载均衡器-一致性哈希算法负载均衡器代码实现-2.0-xunznux
    go实现负载均衡器代码细节文章目录go实现负载均衡器代码细节代码实现原理介绍版本1.0版本2.05、负载均衡器接口增加方法AddServer以加权轮询负载均衡为例展示(SelectServer增加request和AddServer的实现):6、IP散列负载均衡7、一致性哈希负载均衡策略其他内容Lab1:M......
  • golang-切片slice的基本介绍
    Go语言中的切片(slice)基础引子在Go语言中,数组的长度是固定的,且数组长度属于类型的一部分。这种特性限制了数组的灵活性,无法动态扩容,对复杂情况难以适用。切片的定义切片(Slice)是一个拥有相同类型元素的可变长度的序列。它基于数组类型进行了封装,具有很大的灵活性,支持自动扩容。......
  • Django项目中使用markdown语法
    要让Django项目支持Markdown语言,你可以使用第三方库markdown来转换Markdown文本到HTML。以下是如何在Django项目中集成Markdown支持的步骤:1.安装Markdown库首先,安装Markdown库:pipinstallmarkdown2.在视图中使用Markdown在你的视图函数中,使用Markdown库将Markdown文本转......
  • Golang time包
    time包时间和日期是我们编程中经常会用到的,本文主要介绍了Go语言内置的time包的基本用法。time包提供了一些关于时间显示和测量用的函数。time包中日历的计算采用的是公历,不考虑润秒。时间类型Go语言中使用time.Time类型表示时间。我们可以通过time.Now函数获取当......
  • golang使用yaml文件做配置文件
    yaml配置文件host:localhost:3306user:rootpwd:112233dbname:1安装yaml读取工具gogetgopkg.in/yaml.v2从yaml文件读取配置packagemain​import("fmt""gopkg.in/yaml.v2""os")​typeConfstruct{Host string`yaml:"host&qu......
  • golang IO流
    golangIO流file一些操作os包下FileInfo:获取文件信息Reader:读Write:写文件复制mkdircreateremoveSeeker接口设置光标的位置,读写文件typeSeekerinterface{//1、offset偏移量3//2、whence如何设置,当前光标的位置。Seek(offsetint64,whence......
  • for...in 和 for...of 的区别:前端开发中的循环语法
    在前端开发中,JavaScript提供了多种循环语法来遍历数据结构,其中最常见的两种是for...in和for...of。这两者虽然都用于迭代,但它们的用途和行为却有所不同。本文将详细探讨for...in和for...of的区别,并帮助你在合适的场景中选择正确的循环语法。1.for...in语法for...in语......
  • 模板——函数模板的基本语法和调用规则
    1.模板函数    1.1分为自动类型堆到和显示指定类型template<classT>voidSwapNum(T&a,T&b){ Ttemp=a; a=b; b=temp;}voidtest01(){ inta=10; intb=20; doublec=30.5; doubled=40.8; SwapNum(a,b);//自动类型推导 SwapNum<in......
  • 数组001 基本语法
    #include<iostream>usingnamespacestd;//1、数组声明方式:////1.1只声明://数据类型数组名[数组长度]:intarr[10];//里面的元素未初始化,显示的结果不确定////1.2声明的时候初始化:////1.2.1数据类型数组名[数......
  • golang的一些体会
     1.接口变量肯定对应一种具体类型,参考java的接口与实现。2.如果使用接口类型变量存储对象,那内存里会存两份内容:实际类型、接口类型(含接口中的函数指针列表)。   -其实这里的函数指针列表类似于C++的虚函数表。   -因为go的鸭子类型,所以接口变量必须记录接口中函数......