go语言实现加减法出题器(再也不用担心孩子学习了)

简介: go语言实现加减法出题器(再也不用担心孩子学习了)

需求:孩子做题需要我出题,我不想出。

为什么不用我熟悉的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

相关文章
|
21天前
|
存储 Go 索引
go语言中数组和切片
go语言中数组和切片
34 7
|
20天前
|
Go 开发工具
百炼-千问模型通过openai接口构建assistant 等 go语言
由于阿里百炼平台通义千问大模型没有完善的go语言兼容openapi示例,并且官方答复assistant是不兼容openapi sdk的。 实际使用中发现是能够支持的,所以自己写了一个demo test示例,给大家做一个参考。
|
21天前
|
程序员 Go
go语言中结构体(Struct)
go语言中结构体(Struct)
93 71
|
20天前
|
存储 Go 索引
go语言中的数组(Array)
go语言中的数组(Array)
101 67
|
23天前
|
Go 索引
go语言for遍历数组或切片
go语言for遍历数组或切片
92 62
|
25天前
|
并行计算 安全 Go
Go语言中的并发编程:掌握goroutines和channels####
本文深入探讨了Go语言中并发编程的核心概念——goroutine和channel。不同于传统的线程模型,Go通过轻量级的goroutine和通信机制channel,实现了高效的并发处理。我们将从基础概念开始,逐步深入到实际应用案例,揭示如何在Go语言中优雅地实现并发控制和数据同步。 ####
|
21天前
|
存储 Go
go语言中映射
go语言中映射
33 11
|
23天前
|
Go
go语言for遍历映射(map)
go语言for遍历映射(map)
32 12
|
22天前
|
Go 索引
go语言使用索引遍历
go语言使用索引遍历
29 9
|
26天前
|
安全 Serverless Go
Go语言中的并发编程:深入理解与实践####
本文旨在为读者提供一个关于Go语言并发编程的全面指南。我们将从并发的基本概念讲起,逐步深入到Go语言特有的goroutine和channel机制,探讨它们如何简化多线程编程的复杂性。通过实例演示和代码分析,本文将揭示Go语言在处理并发任务时的优势,以及如何在实际项目中高效利用这些特性来提升性能和响应速度。无论你是Go语言的初学者还是有一定经验的开发者,本文都将为你提供有价值的见解和实用的技巧。 ####