需求:孩子做题需要我出题,我不想出。
为什么不用我熟悉的java,go可以直接生成exe文件。
Windows执行程序链接
set_quest.exe
https://www.aliyundrive.com/s/yP3GuhTZoGD
点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极速在线查看,视频原画倍速播放。
一、代码实现
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
var count, num1, num2, num3, num4 int
fmt.Println("请输入出题数字的最大值:")
fmt.Scanln(&num1)
fmt.Println("请输入答案的最大值:")
fmt.Scanln(&num2)
fmt.Println("请输入需要出题的数量:")
fmt.Scanln(&num3)
fmt.Println("请输入需要每行显示的数量:")
fmt.Scanln(&num4)
var sets Set = NewSet()
for true {
tem1 := getRandomWithAll(1, num1)
tem2 := getRandomWithAll(1, num1)
temStr := string(tem1) + string(tem2)
if sets.Contains(temStr) {
continue
} else {
sets.Add(temStr)
}
if tem1 > tem2 {
oper := getRandomWithAll(0, 1)
if oper == 0 {
if tem1-tem2 <= int64(num2) {
fmt.Printf("%d-%d=\t\t", tem1, tem2)
count = calCount(count, num4)
}
} else {
if tem1+tem2 <= int64(num2) {
fmt.Printf("%d+%d=\t\t", tem1, tem2)
count++
if count%num4 == 0 {
fmt.Println()
}
}
}
} else if tem1 < tem2 {
if tem1+tem2 <= int64(num2) {
fmt.Printf("%d+%d=\t\t", tem1, tem2)
count++
if count%num4 == 0 {
fmt.Println()
}
}
}
if count >= num3 {
break
}
}
fmt.Println("\n请输入任意数字退出:")
fmt.Scanln(&count)
}
func calCount(count int, num4 int) int {
count++
if count%num4 == 0 {
fmt.Println()
}
return count
}
func getRandomWithAll(min, max int) int64 {
rand.Seed(time.Now().UnixNano())
return int64(rand.Intn(max-min+1) + min)
}
type Set struct {
m map[string]bool
}
func NewSet() Set {
m := make(map[string]bool)
return Set{m: m}
}
func (s *Set) Contains(val string) bool {
_, ok := s.m[val]
return ok
}
func (s *Set) Add(val string) {
s.m[val] = true
}
func (s *Set) Remove(val string) {
delete(s.m, val)
}
二、测试
三、打包成exe
go build .\set_quest.go