当前位置: 首页 > article >正文

【Go每日一练】猜数字游戏

👻创作者:丶重明
👻创作时间:2025年3月16日
👻擅长领域:运维

目录

  • 1.😶‍🌫️题目:猜数字游戏
  • 2.😶‍🌫️代码开发
  • 3.😶‍🌫️代码输出
  • 4.😶‍🌫️代码解析
  • 5.😶‍🌫️本文知识点
    • 5.1.😶‍🌫️math/rand包
    • 5.2.😶‍🌫️time包
  • 6.😶‍🌫️扩展:密码学安全的随机数

1.😶‍🌫️题目:猜数字游戏

编写一个猜数字的小游戏。计算机会随机生成一个 1 到 100 之间的整数,然后玩家通过输入数字来猜测。每次猜测后,计算机会告诉玩家猜的数字是大了、还是小了,直到玩家猜对为止。

要求 :

  • 程序会随机生成一个数字(范围 1 到 100)。
  • 玩家输入一个数字作为猜测。
  • 如果猜测的数字小于目标数字,程序提示 “太小了”。
  • 如果猜测的数字大于目标数字,程序提示 “太大了”。
  • 当猜中数字时,程序会输出 “恭喜你猜对了!” 并显示玩家猜测的次数。

2.😶‍🌫️代码开发

使用Go语言进行代码开发

package mainimport ("fmt""math/rand""time"
)func main() {rand.Seed(time.Now().UnixNano())target := rand.Intn(100) + 1var guess intattempts := 0fmt.Println("猜数字游戏现在开始!")fmt.Println("我已经选择了一个 1 到 100 之间的数字,请你猜一猜!")for {attempts++fmt.Print("请输入你的猜测: ")fmt.Scan(&guess)if guess < target {fmt.Println("你的猜测太小了,请再试一次。")} else if guess > target {fmt.Println("你的猜测太大了,请再试一次。")} else {fmt.Printf("恭喜你,猜对了!你用了 %d 次尝试。\n", attempts)break}}
}

3.😶‍🌫️代码输出

保存代码文件,执行go run运行代码

> go run .\9.gotest.go
猜数字游戏现在开始!
我已经选择了一个 1100 之间的数字,请你猜一猜!
请输入你的猜测: 50
你的猜测太大了,请再试一次。
请输入你的猜测: 30
你的猜测太小了,请再试一次。
请输入你的猜测: 40
你的猜测太大了,请再试一次。
请输入你的猜测: 35
你的猜测太大了,请再试一次。
请输入你的猜测: 33
你的猜测太小了,请再试一次。
请输入你的猜测: 34
恭喜你,猜对了!你用了 6 次尝试。

4.😶‍🌫️代码解析

rand.Seed(time.Now().UnixNano())

rand.Seed是Go语言中用于设置随机数生成器种子的函数,种子是随机数生成算法的起点,它决定了生成的随机数序列。

time.Now()返回当前的时间,一个Time类型的对象,然后通过.UnixNano()将时间转换为自1970年1月1日以来的纳秒数。

如果不设置种子,那么默认会使用一个固定的种子值,这样每次运行程序时,生成的随机数都是相同的。

time.Now().UnixNano()返回的纳秒数在每次程序启动时都是不同的,因此它能作为一个良好的种子,确保每次运行程序时生成的随机数都是不同的

target := rand.Intn(100) + 1这句什么意思

rand.Intn(100)会生成一个0-99的随机整数,为了避免生成0和不能生成00,所以需要+1,这样取值范围就是1-100。

后续内容就是一个for循环中运行判断逻辑,每完成一次循环,attempts的值加1,直到猜中数字后,执行break退出循环。

5.😶‍🌫️本文知识点

5.1.😶‍🌫️math/rand包

math/rand 是一个标准库包,主要用于生成伪随机数。

以下是一些常见的函数:

功能方法示例
基础随机整数Intn(n)rand.Intn(100) → 0~99
自定义范围整数Intn(max-min) + minrand.Intn(50)+10 → 10~59
随机浮点数Float64()rand.Float64() → 0.0~1.0
随机排列Permrand.Perm(5) → [3,1,4,0,2]
设置随机种子Seed(seed)rand.Seed(time.Now().UnixNano())

本文使用的就是math/rand包的Intn(n)方法和Seed方法。

5.2.😶‍🌫️time包

time包也是Go语言标准库包之一,用于处理时间相关的问题。

以下有几个常见的使用方法供参考:

  1. 获取当前时间
// 获取正常格式的当前时间:2023-10-05 14:30:15.123456 +0800 CST
time.Now()// 获取UTC格式的当前时间:
time.Now().UTC()
  1. 获取时间戳
// 获取秒级别的时间戳
now.Unix()// 获取毫米级时间戳
now.UnixMilli()// 获取纳秒级时间戳,也是本文所使用的方法
now.UnixNano()

更多内容请查看官方手册

6.😶‍🌫️扩展:密码学安全的随机数

math/rand生成的随机数可用于一般使用场景,因为结果是可预测的。

如果需生成密码学安全(Cryptographically Secure)的随机数(如密钥、令牌、密码等敏感数据),必须使用标准库中的 crypto/rand 包。

crypto/rand 包基于操作系统提供的安全熵源,生成的随机数具有密码学强度。

例如:生成随机字符串

package mainimport ("crypto/rand""fmt"
)func main() {// 生成 16 字节随机盐值salt := make([]byte, 16)_, err := rand.Read(salt)if err != nil {panic(err)}fmt.Println("盐值 (Hex):", fmt.Sprintf("%x", salt))
}

输出结果:

> go run .\10.gotest.go
盐值 (Hex): a6cbf72c30d584fba7a1794cc511258e

同系列:

上一篇【Go每日一练】计算整数数组的最大子数组和

相关文章:

【Go每日一练】猜数字游戏

&#x1f47b;创作者&#xff1a;丶重明 &#x1f47b;创作时间&#xff1a;2025年3月16日 &#x1f47b;擅长领域&#xff1a;运维 目录 1.&#x1f636;‍&#x1f32b;️题目&#xff1a;猜数字游戏2.&#x1f636;‍&#x1f32b;️代码开发3.&#x1f636;‍&#x1f32b;…...

SpringBoot对接DeepSeek

文章目录 Spring Boot 集成 DeepSeek API 详细步骤1. 创建API Key1.访问 [DeepSeek控制台](https://platform.deepseek.com/usage) 并登录。2.点击 Create API Key 生成新密钥。3.复制并保存密钥&#xff08;需在Spring Boot配置文件中使用&#xff09;。 2. 创建Spring Boot工…...

doris:审计日志

Doris 提供了对于数据库操作的审计能力&#xff0c;可以记录用户对数据库的登陆、查询、修改操作。在 Doris 中&#xff0c;可以直接通过内置系统表查询审计日志&#xff0c;也可以直接查看 Doris 的审计日志文件。 开启审计日志​ 通过全局变量 enable_audit_plugin 可以随时…...

`fetch` 和 `axios`的前端使用区别

&#x1f389;&#x1f389;&#x1f389;&#x1f389;&#x1f389;&#x1f389;&#x1f389;&#x1f389;&#x1f389;&#x1f389;&#x1f389;&#x1f389;&#x1f389;&#x1f389;&#x1f389;&#x1f389;&#x1f389;&#x1f389; 欢迎访问的个人博客&am…...

大语言模型的多垂类快速评估与 A/B 测试

简介 行业领先的模型构建企业携手澳鹏&#xff08;Appen&#xff09;开展了一项极具挑战性的项目。针对 3 至 6 个大型语言模型&#xff08;LLM&#xff09;&#xff0c;在广泛的通用领域及复杂专业领域&#xff08;如医疗保健、法律、金融、编程、数学和汽车行业等&#xff0…...

【RabbitMQ】RabbitMQ如何保证消息不丢失?

为了保证消息不丢失&#xff0c;需要在生产者、RabbitMQ本身和消费者三个环节采取相应措施。 1.生产者端&#xff1a;确保消息发送成功 1.1开启消息确认机制(Publisher Confirms) 原理&#xff1a; 生产者发送消息后&#xff0c;RabbitMQ会返回一个确认(ACK),表示消息已成功…...

RAGFlow + LlamaIndex 本地知识库RAG增强架构与实现直播智能复盘

一、需求分析与架构设计 基于 RAGFlow LlamaIndex 本地知识库RAG 扩展直播话术合规与复盘系统&#xff0c;需构建 实时流处理、多模态合规引擎、智能复盘分析 三层能力。以下是完整架构图与技术方案&#xff1a; 二、核心模块技术方案 1. 直播流实时处理&#xff08;输入层→…...

《UNIX网络编程卷1:套接字联网API》第2章 传输层:TCP、UDP和SCTP

《UNIX网络编程卷1&#xff1a;套接字联网API》第2章 传输层&#xff1a;TCP、UDP和SCTP 2.1 传输层的核心作用与协议选型 传输层是网络协议栈中承上启下的核心层&#xff0c;直接决定应用的通信质量。其主要职责包括&#xff1a; 端到端通信&#xff1a;屏蔽底层网络细节&am…...

阿里云平台服务器操作以及发布静态项目

目录&#xff1a; 1、云服务器介绍2、云服务器界面3、发布静态项目1、启动nginx2、ngixn访问3、外网访问测试4、拷贝静态资源到nginx目录下并重启nginx 1、云服务器介绍 2、云服务器界面 实例详情&#xff1a;里面主要显示云服务的内外网地址以及一些启动/停止的操作。监控&…...

【大模型实战篇】使用GPTQ量化QwQ-32B微调后的推理模型

1. 量化背景 之所以做量化&#xff0c;就是希望在现有的硬件条件下&#xff0c;提升性能。量化能将模型权重从高精度&#xff08;如FP32&#xff09;转换为低精度&#xff08;如INT8/FP16&#xff09;&#xff0c;内存占用可减少50%~75%。低精度运算&#xff08;如INT8&#xf…...

Spring WebFlux之流式输出

&#x1f389;&#x1f389;&#x1f389;&#x1f389;&#x1f389;&#x1f389; 欢迎访问的个人博客&#xff1a;https://swzbk.site/&#xff0c;加好友&#xff0c;拉你入福利群 &#x1f389;&#x1f389;&#x1f389;&#x1f389;&#x1f389;&#x1f389; 流式输…...

基于springboot医疗平台系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 信息化时代&#xff0c;各行各业都以网络为基础飞速发展&#xff0c;而医疗服务行业的发展却进展缓慢&#xff0c;传统的医疗服务行业已经逐渐不满足民众的需求&#xff0c;有些还在以线下预约挂号的方式接待病人&#xff0c;为此设计一个医疗平台系统很有必要。此类系统…...

Stable Diffusion lora训练(一)

一、不同维度的LoRA训练步数建议 2D风格训练 数据规模&#xff1a;建议20-50张高质量图片&#xff08;分辨率≥10241024&#xff09;&#xff0c;覆盖多角度、多表情的平面风格。步数范围&#xff1a;总步数控制在1000-2000步&#xff0c;公式为 总步数 Repeat Image Epoch …...

网络空间安全(37)获取webshell方法总结

一、直接上传获取Webshell 这是最常见且直接的方法&#xff0c;利用网站对上传文件的过滤不严或存在漏洞&#xff0c;直接上传Webshell文件。 常见场景&#xff1a; 许多PHP和JSP程序存在此类漏洞。例如&#xff0c;一些论坛系统允许用户上传头像或心情图标&#xff0c;攻击者可…...

第十三次CCF-CSP认证(含C++源码)

第十三次CCF-CSP认证 跳一跳满分题解 碰撞的小球满分题解遇到的问题 棋局评估满分题解 跳一跳 题目链接 满分题解 没什么好说的 基本思路就是如何用代码翻译题目所给的一些限制&#xff0c;以及变量应该如何更新&#xff0c;没像往常一样给一个n&#xff0c;怎么读入数据&…...

【Agent】OpenManus-Prompt组件详细分析

1. 提示词架构概述 OpenManus 的提示词组件采用了模块化设计&#xff0c;为不同类型的智能体提供专门的提示词模板。每个提示词模块通常包含两种核心提示词&#xff1a;系统提示词&#xff08;System Prompt&#xff09;和下一步提示词&#xff08;Next Step Prompt&#xff0…...

swagger ui 界面清除登录信息的办法

我们在开发过程中&#xff0c;用swagger ui 测试接口的时候&#xff0c;可能会要修改当前登录的用户。 但是如果我们在谷歌中对调试的本地swagger ui 登录地址存储过账户密码&#xff0c;每次启动项目调试之后&#xff0c;都会自动登录swagger ui &#xff0c;登录界面一闪就…...

TensorFlow 的基本概念和使用场景

TensorFlow 是一个由 Google 开发的开源机器学习框架&#xff0c;主要用于构建和训练深度学习模型。下面是一些 TensorFlow 的基本概念和使用场景&#xff1a; 基本概念&#xff1a; 张量&#xff08;Tensor&#xff09;&#xff1a;在 TensorFlow 中&#xff0c;数据以张量的…...

基于x11vnc的ubuntu远程桌面

1、安装VNC服务 sudo apt install x11vnc -y2、创建连接密码 sudo x11vnc -storepasswd3、安装lightdm服务 x11vnc 在 默认的 GDM3 中不起作用&#xff0c;因此需要使用 lightdm 桌面管理环境 sudo apt install lightdm -y切换至lightdm&#xff0c;上一步已经切换则跳过该…...

Cursor解锁Claude Max,助力AI编程新突破!

Cursor 最新推出的 Claude Max 模型&#xff0c;以其卓越的性能和创新的能力&#xff0c;正在重新定义我们对 AI 辅助编程的认知。这款搭载 Claude3.7 大脑的超级模型&#xff0c;不仅具备超强智能&#xff0c;还凭借一系列技术突破&#xff0c;向传统 AI 编程工具发起了挑战。…...

created在vue3 script setup中的写法

在 Vue 2 里&#xff0c;created 是一个生命周期钩子函数&#xff0c;会在实例已经创建完成之后被调用&#xff0c;主要用于在实例初始化之后、数据观测和 event/watcher 事件配置之前执行代码。而在 Vue 3 的 <script setup> 语法糖里&#xff0c;不再有像 Vue 2 那样直…...

GenICam标准

GenICam的目标是为所有类型的相机提供一个统一的编程接口。无论相机使用的是哪种传输协议或实现了哪些功能&#xff0c;编程接口&#xff08;API&#xff09;都是一样的。 GenICam&#xff08;Generic Interface for Cameras&#xff09;是一个为工业相机和图像采集设备设计的…...

ESP8266 与 ARM7 接口-LPC2148 创建 Web 服务器以控制 LED

ESP8266 与 ARM7 接口-LPC2148 创建 Web 服务器以控制 LED ESP8266 Wi-Fi 收发器提供了一种将微控制器连接到网络的方法。它被广泛用于物联网项目,因为它便宜、体积小且易于使用。 在本教程中,我们将 ESP8266 Wi-Fi 模块与 ARM7-LPC2148 微控制器连接,并创建一个 Web 服务…...

​智享三代 AI 无人直播系统:颠覆传统,重塑直播新格局

在当今数字化浪潮席卷全球的时代&#xff0c;直播行业作为互联网经济的重要组成部分&#xff0c;正以前所未有的速度蓬勃发展。从最初的娱乐直播兴起&#xff0c;到如今电商直播、知识付费直播等多元业态百花齐放&#xff0c;直播已然成为人们生活和商业活动中不可或缺的一环。…...

通过C#脚本更改材质球的参数

// 设置贴图Texture mTexture Resources.Load("myTexture", typeof(Texture )) as Texture;material.SetTexture("_MainTex", mTexture );// 设置整数material.SetInt("_Int", 1);// 设置浮点material.SetFloat("_Float", 0.1f);// 设…...

FPGA管脚约束

目录 前言 一、IO约束 二、延迟约束 前言 IO约束包括管脚约束和延迟约束。 一、IO约束 对管脚进行约束&#xff0c;对应的约束语句&#xff1a; set_property -dict {PACKAGE_PIN AJ16 IOSTANDARD LVCMOS18} [get_ports "led[0]" ] 上面是单端的管脚&…...

已在此计算机上安装相同或更高版本的 .NET Framework 4”安装报错问题

安裝低版本的 .netFramework會被拒絕 需要做兩件事 1&#xff0c;允許windows安裝低版本的.net framework “已在此计算机上安装相同或更高版本的 .NET Framework 4”安装报错问题-CSDN博客 2,設置完成後重新安裝低版本的 .net framework,要用對應開發版本的 Win10 电脑安…...

如何判断 MSF 的 Payload 是 Staged 还是 Stageless(含 Meterpreter 与普通 Shell 对比)

在渗透测试领域&#xff0c;Metasploit Framework&#xff08;MSF&#xff09;的 msfvenom 工具是生成 Payload&#xff08;载荷&#xff09;的核心利器。然而&#xff0c;当我们选择 Payload 时&#xff0c;经常会遇到一个问题&#xff1a;这个 Payload 是 Staged&#xff08;…...

【万字总结】前端全方位性能优化指南(一)——Brotli压缩、CDN智能分发、资源合并

前言 2025年前端技术前沿呈现三大核心趋势:​AI深度赋能开发全流程,智能工具如GitHub Copilot X和Cursor实现代码生成、实时协作与自动化审查,开发效率提升3倍以上;性能与架构革新,WebAssembly 2.0支持多线程与Rust内存优化,边缘计算将渲染延迟压至50ms内,微前端Module …...

二.使用ffmpeg对原始音频数据重采样并进行AAC编码

重采样&#xff1a;将音频三元组【采样率 采样格式 通道数】之中的任何一个或者多个值改变。 一.为什么要进行重采样&#xff1f; 1.原始音频数据和编码器的数据格式不一致 2.播放器要求的和获取的数据不一致 3.方便运算 二.本次编码流程 1.了解自己本机麦克风参数&#x…...