linuxea:go阶段练习题(18)

  1. 打印乘法口诀 for + if + fmt.Println + fmt.Printf

  2. 猜数字游戏 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!
0 分享

您可以选择一种方式赞助本站

支付宝扫码赞助

支付宝扫码赞助

日期: 2019-10-24分类: Golang

标签: Golang

发表评论