go阶段练习题(18)

2023年 7月 15日 85.1k 0

请输入图片描述

  • 打印乘法口诀 for + if + fmt.Println + fmt.Printf
  • 猜数字游戏 for if continue/break a. 生成一个[0, 100)随机数 b. 让用户最多猜 5次(从命令行输入一个整数) 猜的太大 => 提示太大了,你还有N此猜测机会 猜的太小 => 提示太小了,你还有N此猜测机会 猜中了 => 猜中了

     5次都没猜中 => 退出,并提示太笨了

    挑战: 当5此都没有猜中:提示太笨了,重新开始猜数游戏(重新生成随机数,重新开始5次计数)

  • 练习题1示例

    成法表,从1开始相乘,1*1,1*2,1*3,等等,这样使用for循环可以实现,如下:

    for i :=1;i<=line;i++ {
        fmt.Printf("%d * %d = %-2d   ",i,line,i*line)
    }
    1x1
    1x2 2x2
    1x3    2x3 3x3
    1x4 2x4 3x4 4x4

    这里而后还需要进行一次循环,9以内要进行相乘。最终如下:

    package main
    import "fmt"
    
    func main(){
        for line :=1;line <=9;line++ {
            for i :=1;i<=line;i++ {
                fmt.Print(i,"x",line,"=",i*line,"t")
            }
        fmt.Println()
        }
    }

    运行

    [root@linuxea-marksugar /opt/Golang]# go run  99xfb2.go 
    1x1=1    
    1x2=2    2x2=4    
    1x3=3    2x3=6    3x3=9    
    1x4=4    2x4=8    3x4=12    4x4=16    
    1x5=5    2x5=10    3x5=15    4x5=20    5x5=25    
    1x6=6    2x6=12    3x6=18    4x6=24    5x6=30    6x6=36    
    1x7=7    2x7=14    3x7=21    4x7=28    5x7=35    6x7=42    7x7=49    
    1x8=8    2x8=16    3x8=24    4x8=32    5x8=40    6x8=48    7x8=56    8x8=64    
    1x9=9    2x9=18    3x9=27    4x9=36    5x9=45    6x9=54    7x9=63    8x9=72    9x9=81    

    或者这样,使用Printf,这里还是用了负号,左对齐-2d

    package main
    import "fmt"
    
    func main(){
        for line :=1;line <=9;line++ {
            for i :=1;i<=line;i++ {
                fmt.Printf("%d * %d = %-2d   ",i,line,i*line)
            }
        fmt.Println()
        }
    }

    运行:

    [root@marksugar /opt/Golang]# go run 99xfb.go 
    1 * 1 = 1    
    1 * 2 = 2    2 * 2 = 4    
    1 * 3 = 3    2 * 3 = 6    3 * 3 = 9    
    1 * 4 = 4    2 * 4 = 8    3 * 4 = 12   4 * 4 = 16   
    1 * 5 = 5    2 * 5 = 10   3 * 5 = 15   4 * 5 = 20   5 * 5 = 25   
    1 * 6 = 6    2 * 6 = 12   3 * 6 = 18   4 * 6 = 24   5 * 6 = 30   6 * 6 = 36   
    1 * 7 = 7    2 * 7 = 14   3 * 7 = 21   4 * 7 = 28   5 * 7 = 35   6 * 7 = 42   7 * 7 = 49   
    1 * 8 = 8    2 * 8 = 16   3 * 8 = 24   4 * 8 = 32   5 * 8 = 40   6 * 8 = 48   7 * 8 = 56   8 * 8 = 64   
    1 * 9 = 9    2 * 9 = 18   3 * 9 = 27   4 * 9 = 36   5 * 9 = 45   6 * 9 = 54   7 * 9 = 63   8 * 9 = 72   9 * 9 = 81   

    2.猜数字游戏 for if continue/break a. 生成一个[0, 100)随机数 b. 让用户最多猜 5次(从命令行输入一个整数) 猜的太大 => 提示太大了,你还有N此猜测机会 猜的太小 => 提示太小了,你还有N此猜测机会 猜中了 => 猜中了

    5次都没猜中 => 退出,并提示太笨了

    挑战: 当5此都没有猜中:提示太笨了,重新开始猜数游戏(重新生成随机数,重新开始5次计数)

    !!! note需要一个随机数的种子

    会用到time和math/rand模块

    package main
    
    import (
        "fmt"
        "math/rand"
        "time"
    )
    func main(){
        rand.Seed(time.Now().Unix())
        fmt.Println(rand.Int())
    }

    这样我们会拿到一串随机数

    [root@marksugar /opt/Golang]# go run work11.go 
    4539660804304182971
    [root@marksugar /opt/Golang]# go run work11.go 
    125010350273079313
    [root@marksugar /opt/Golang]# go run work11.go 
    5357909466568961262

    而后使用% 100对0~100取余

    package main
    
    import (
        "fmt"
        "math/rand"
        "time"
    )
    func main(){
        rand.Seed(time.Now().Unix())
        fmt.Println(rand.Int() % 100)
    }

    运行

    [root@marksugar /opt/Golang]# go run work11.go 
    90
    [root@marksugar /opt/Golang]# go run work11.go 
    15
    [root@marksugar /opt/Golang]# go run work11.go 
    15
    [root@marksugar /opt/Golang]# go run work11.go 
    89

    !!! note也可以使用Intn(100)也可以取余

        rand.Seed(time.Now().Unix())
        fmt.Println(rand.Intn(100))
    [root@marksugar /opt/Golang]# go run work11.go 
    72
    [root@marksugar /opt/Golang]# go run work11.go 
    2
    [root@marksugar /opt/Golang]# go run work11.go 
    15

    练习题2示例

    • 定义了一个dadata函数,使用系统时间作为随机种子,获取100内的随机数,这样每次都会重新获取。
    • 使用for嵌套了这个dadata函数,在执行三次失败后,会重新执行这个函数获取0~100的随机数。
    • 如果输入信息满足条件,使用goto 跳出循环。

    代码如下:

    package main
    
    import (
        "fmt"
        "math/rand"
        "strconv"
        "time"
    )
    func dadata(sjs int) int{
        rand.Seed(time.Now().UnixNano())   // 系统时间为随机种子
        return rand.Intn(sjs)
    }
    func main(){
        for {
        sjs := dadata(100)
        fmt.Println(sjs)
        num := 3
        var dA1 string
    
        for i:=0;i<=3;i++{
            rnum := num - i
            fmt.Print("开始猜数字游戏,请输入:")
            fmt.Scanf("%v",&dA1)
            dA1,err := strconv.ParseInt(dA1,10,0)  // 判断输入的是整数
            if err != nil {
                fmt.Println("你输入的不是数字",err)
                break
            }else if int(dA1) == sjs {
                fmt.Printf("恭喜你猜对了数字是%v!", sjs)
                goto ENDD
            } else if int(dA1) > sjs {
                fmt.Printf("猜大了,你还可以猜测%v次n",rnum)
            } else if int(dA1) < sjs {
                fmt.Printf("猜小了,你还可以猜测%v次n",rnum)
            }
        }
        }
    ENDD:
    }

    运行

    [root@marksugar /opt/Golang]# go run work1.go 
    5
    开始猜数字游戏,请输入:6
    猜大了,你还可以猜测3次
    开始猜数字游戏,请输入:9
    猜大了,你还可以猜测2次
    开始猜数字游戏,请输入:8
    猜大了,你还可以猜测1次
    开始猜数字游戏,请输入:2
    猜小了,你还可以猜测0次
    39
    开始猜数字游戏,请输入:39
    恭喜你猜对了数字是39!

    当然,这里也可以使用bool类型来判断

    package main
    
    import (
        "fmt"
        "math/rand"
        "strconv"
        "time"
    )
    func dadata(sjs int) int{
        rand.Seed(time.Now().UnixNano())   // 系统时间为随机种子
        return rand.Intn(sjs)
    }
    func main(){
        for {
            sjs := dadata(100)
            fmt.Println(sjs)
            num := 3
            var okk bool
            var dA1 string
    
            for i:=0;i<=3;i++{
                rnum := num - i
                fmt.Print("开始猜数字游戏,请输入:")
                fmt.Scanf("%v",&dA1)
                dA1,err := strconv.ParseInt(dA1,10,0)  // 判断输入的是整数
                if err != nil {
                    fmt.Println("你输入的不是数字",err)
                    break
                }else if int(dA1) == sjs {
                    okk = true
                    fmt.Printf("恭喜你猜对了数字是%v!", sjs)
                    goto ENDD
                } else if int(dA1) > sjs {
                    fmt.Printf("猜大了,你还可以猜测%v次n",rnum)
                } else {
                    fmt.Printf("猜小了,你还可以猜测%v次n",rnum)
                }
            }
            if !okk {
                fmt.Println("游戏结束!")
                }
        }
    ENDD:
    }

    运行

    [root@linuxea-marksugar /opt/Golang]# go run work3.go
    69
    开始猜数字游戏,请输入:321
    猜大了,你还可以猜测3次
    开始猜数字游戏,请输入:321
    猜大了,你还可以猜测2次
    开始猜数字游戏,请输入:321
    猜大了,你还可以猜测1次
    开始猜数字游戏,请输入:312
    猜大了,你还可以猜测0次
    游戏结束!
    5
    开始猜数字游戏,请输入:321
    猜大了,你还可以猜测3次
    开始猜数字游戏,请输入:312
    猜大了,你还可以猜测2次
    开始猜数字游戏,请输入:321
    猜大了,你还可以猜测1次
    开始猜数字游戏,请输入:312
    猜大了,你还可以猜测0次
    游戏结束!
    62
    开始猜数字游戏,请输入:62
    恭喜你猜对了数字是62!

    相关文章

    JavaScript2024新功能:Object.groupBy、正则表达式v标志
    PHP trim 函数对多字节字符的使用和限制
    新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
    使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
    为React 19做准备:WordPress 6.6用户指南
    如何删除WordPress中的所有评论

    发布评论