猜数字游戏 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!