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

【GO】go语言入门实战 —— 猜数字游戏

文章目录

      • 程序介绍
      • 设置随机数
      • 读取用户输入
      • 实现判断逻辑
      • 实现游戏循环
      • 完整代码

程序介绍

首先生成一个介于1~100之间的随机数,然后提示玩家输入数字,并告诉玩家是猜对了还是猜错了,如果对了程序就结束,如果错了就提醒玩家是大了还是小了,然后玩家继续输入。

设置随机数

maxNum := 100
rand.Seed(time.Now().UnixNano())  //修改随机数种子为当前时间戳
secretNumber := rand.Intn(maxNum)
  1. rand.Seed(seed int64):播种seed为随机数种子
  2. func time.Now() time.Time:获取当前时间
  3. func (time.Time).UnixNano() int64:将Time转成时间戳返回
  4. func rand.Intn(n int) int:设置一个随机数,随机数的范围为[0, n)

读取用户输入

这里用的是高并发输入,可以用简单的Scan进行输入。

fmt.Print("Guess a number between 1 and", maxNum, ": ")
reader := bufio.NewReader(os.Stdin)
input, err := reader.ReadString('\n')
if err != nil {fmt.Println("An error occurred while reading input. Try again", err)return
input = strings.TrimSuffix(input, "\r\n") //去掉input末尾的回车换行符guess, err := strconv.Atoi(input)         //将input转换为整数
if err != nil {fmt.Print("Invalid input. Try again: ")return
fmt.Print("Your guess is ", guess, ". ")
  1. func (b *Reader) ReadString(delim byte) (string, error)ReadString一直在Reader* b中读取,直到读到delimdelim也会被读进去

  2. reader := bufio.NewReader(os.Stdin):将reader与标准输入流Stdin关联

    func NewReader(rd io.Reader) *ReaderNewReader返回一个具有默认缓冲区大小新的Reader

  3. input, err := reader.ReadString('\n'):从reader中读取,遇到'\n'就停止,把包括'\n'在内的内容放到字符串input中,错误信息返回到err

    func (b *Reader) ReadString(delim byte) (string, error)ReadString读取直到输入中第一次出现分隔符delim,返回一个字符串,其中包含delim之前的数据并包括delim。如果ReadString在找到分隔符之前遇到错误,它将返回在错误之前读取的数据和错误本身(通常是io.EOF)。

  4. input = strings.TrimSuffix(input, "\n"):因为读入的时候把回车符\r和换行符\n也读进来了,所以这一步是去掉换行符。只保留input中换行符之前的内容,不包括换行符。当然也可以使用

    func TrimSuffix(s, suffix string) stringTrimSuffix返回s,不包含所提供的后缀字符串。如果s没有以后缀结尾,则返回不变的s

  5. guess, err := strconv.Atoi(input):将字符串input转成整型存给guess

    func Atoi(s string) (int, error)Atoi相当于转换为int类型的ParseInt(s, 10,0)

实现判断逻辑

if guess > secretNumber {fmt.Print("Too Big! Try again: ")
} else if guess < secretNumber {fmt.Print("Too Small! Try again: ")
} else {fmt.Println("You got it!")break
}

一个简单的if分支语句,没什么好说的。

实现游戏循环

fmt.Println("Guess a number between 1 and ", maxNum, ": ")
reader := bufio.NewReader(os.Stdin)
for {input, err := reader.ReadString('\n')if err != nil {fmt.Println("An error occurred while reading input. Try again", err)continue}input = strings.TrimSuffix(input, "\r\n") //去掉input末尾的回车换行符guess, err := strconv.Atoi(input)         //将input转换为整数if err != nil {fmt.Print("Invalid input. Try again: ")continue}fmt.Print("Your guess is ", guess, ". ")if guess > secretNumber {fmt.Print("Too Big! Try again: ")} else if guess < secretNumber {fmt.Print("Too Small! Try again: ")} else {fmt.Println("You got it!")break}
}
  1. 上面只完成了用户的一次猜测,用户输入往后的部分改成循环即可完成,猜对记得跳出循环。
  2. 当输入错误的时候不要直接返回了,可以改为continue继续循环

完整代码

package mainimport ("bufio""fmt""math/rand""os""strconv""strings""time"
)func main() {// 设置随机数maxNum := 100rand.Seed(time.Now().UnixNano()) //修改随机数种子为当前时间戳secretNumber := rand.Intn(maxNum)fmt.Print("Guess a number between 1 and ", maxNum, ": ")reader := bufio.NewReader(os.Stdin)for {input, err := reader.ReadString('\n')if err != nil {fmt.Println("An error occurred while reading input. Try again", err)continue}input = strings.Trim(input, "\r\n") //去掉input末尾的换行符guess, err := strconv.Atoi(input)   //将input转换为整数if err != nil {fmt.Print("Invalid input. Try again: ")continue}fmt.Print("Your guess is ", guess, ". ")if guess > secretNumber {fmt.Print("Too Big! Try again: ")} else if guess < secretNumber {fmt.Print("Too Small! Try again: ")} else {fmt.Println("You got it!")break}}
}

相关文章:

【GO】go语言入门实战 —— 猜数字游戏

文章目录 程序介绍设置随机数读取用户输入实现判断逻辑实现游戏循环完整代码 程序介绍 首先生成一个介于1~100之间的随机数&#xff0c;然后提示玩家输入数字&#xff0c;并告诉玩家是猜对了还是猜错了&#xff0c;如果对了程序就结束&#xff0c;如果错了就提醒玩家是大了还是…...

opencv-25 图像几何变换04- 透视 cv2.warpPerspective()

什么是透视&#xff1f; 透视是一种几何学概念&#xff0c;用于描述在三维空间中观察物体时&#xff0c;由于视角的不同而产生的变形效果。在现实世界中&#xff0c;当我们从不同的角度或位置观察物体时&#xff0c;它们会呈现出不同的形状和大小。这种现象被称为透视效果。 透…...

视频讲解Codeforces Round 887 (Div. 2)(A--C)

文章目录 A. Desorting1、板书2、代码 B. Fibonaccharsis1、板书2、代码 C. Ntarsis Set1、板书2、代码 视频讲解Codeforces Round 887 (Div. 2)&#xff08;A–C&#xff09; A. Desorting 1、板书 2、代码 #include<bits/stdc.h> #define endl \n #define INF 0x3f…...

【团队协作开发】将Gitee项目导入到本地IDEA中出现根目录不完整的问题解决(已解决)

前言&#xff1a;在团队协作开发过程中&#xff0c;通常我们的Gitee完整项目中会包含很多内容&#xff1a;后端代码、前端代码、项目结构图、项目文档等一系列资产。 将Gitee项目导入到本地IDEA中&#xff0c;通常会出现根目录不完整的问题。这是因为项目里面包含了后端代码、前…...

vue-pdf 单列显示多个pdf页面

<template><div><pdfv-for"i in numPages":key"i":src"src":page"i"style"display: inline-block; width: 100%"></pdf> <!-- 宽度设置100% 一行只展示一页 --></div> </template&g…...

2023年FPGA好就业吗?

FPGA岗位有哪些&#xff1f; 从芯片设计流程来看&#xff0c;FPGA岗位可以分四类 产品开发期&#xff1a;FPGA系统架构师 芯片设计期&#xff1a;数字IC设计工程师、FPGA开发工程师 芯片流片期&#xff1a;FPGA验证工程师 产品维护期&#xff1a;FAE工程师 从行业上来说&#x…...

【业务功能篇52】Springboot+mybatis mysql开启批量执行sql参数 allowMultiQueries=true

allowMultiQueriestrue参数的作用&#xff1a; 可以在sql语句后携带分号&#xff0c;实现多语句执行。可以执行批处理&#xff0c;同时发出多个SQL语句。 在application-xxx.xml配置文件中&#xff0c;配置数据库的信息 spring:datasource:dynamic:primary: mysqldb # 默认数…...

StableDiffusion 换脸实现

先看效果&#xff1a; 想要换的脸&#xff1a; 想要把脸放到的目标图片&#xff1a; 实现方案&#xff1a; StableDiffusionroop&#xff08;本次实验基于roopV0.02版本&#xff09; 1/安装SD&#xff0c;模型选择 DreamShaper,Sampler使用 Euler a 2/安装roop插件 roop插…...

直播平台源码开发提高直播质量的关键:视频编码和解码技术

在互联网日益发展的今天&#xff0c;直播平台成为人们互联网生活的主力军&#xff0c;直播平台功能的多样化与智能化使我们的生活有了极大地改变&#xff0c;比如短视频功能&#xff0c;它让我们既可以随时随地去发布自己所拍摄到的东西让世界各地的用户看到&#xff0c;也能让…...

如何使用 PHP 更新数据到数据库?

首先&#xff0c;你需要有个数据库&#xff0c;对吧&#xff1f;如果你还没有的话&#xff0c;可以用PHP的MySQL扩展来创建一个。不过&#xff0c;在此之前&#xff0c;你需要确保你的服务器已经安装了MySQL&#xff0c;并且你的PHP环境已经支持MySQL扩展。 好了&#xff0c;现…...

NLP masked_tokens[]、token_masks[]是什么?

1、masked_tokens[]、token_masks[]介绍 masked_tokens和token_masks两个列表用于存储mask处理后的token&#xff08;分词&#xff09;结果和对应的mask标志。 masked_tokens列表存储经过mask处理后的分词结果。 token_masks列表存储与每个分词结果对应的mask标志。 2、示例…...

aoa_android工程编译注意事项

1. android studio 版本 &#xff1a; 3.0.0 Android Studio 下载文件归档 | Android 开发者 | Android Developers (google.cn) 下载地址&#xff1a; https://redirector.gvt1.com/edgedl/android/studio/install/3.0.0.18/android-studio-ide-171.4408382-windows.ex…...

java篇 类的进阶0x06:可见性修饰符(访问修饰符)

文章目录 可见性修饰符&#xff08;访问修饰符&#xff09;成员变量都应该是 private构造方法可以是 private 的public 修饰的东西尽量不要改动非 public 的类&#xff0c;类名可以不和文件名相同protected 继承专属的访问控制 可见性修饰符&#xff08;访问修饰符&#xff09;…...

Java 贪心算法经典问题解决

文章目录 分金条题目思路代码实现测试用例以及结果输出 花费资金做项目最大收益题目思路代码实现测试用例以及结果输出 预定会议室题目思路代码实现测试用例以及结果输出 取中位数题目思路代码实现测试用例以及结果输出 最低字典序题目思路代码实现测试用例以及结果输出 结语 分…...

所有docker命令无效,解决办法

目录 ■前言 今天使用docker时&#xff0c;所有命令无效 ■解决办法如下 1.停止docker服务 2.查看状态 3.删除之前的docker相关的文件 4.再次查看状态 5.使用相关命令 &#xff08;好用了&#xff09; 6.重新下载镜像 ■前言 今天使用docker时&#xff0c;所有命令无…...

系列一、创建者模式

一、概述 创建者模式的主要关注点是"怎样创建对象?"&#xff0c;它的主要特点是"将对象的创建与使用分离"。这样可以降低系统的耦合度&#xff0c;使用者不需要关注对象的创建细节。 二、分类 单例模式工厂方法模式抽象工厂模式原型模式建造者模式...

数据库系列:覆盖索引和规避回表

1 介绍 在MySQL数据库查询过程中&#xff0c;索引覆盖和避免不必要的回表&#xff0c;是减少检索步骤&#xff0c;提高执行效率的有效手段。下面从这两个角度分析如何进行MySQL检索提效。 2 数据准备 模拟一个500w数据容量的部门表 emp&#xff0c;表结构如下&#xff0c;并…...

java Spring Boot上线运维 启动jar时控制台调整零时变量

前面的文章 java 打包Spring Boot项目&#xff0c;并运行在windows系统中和将Spring Boot项目打包部署到阿里云linux服务器讲述了Spring Boot项目打包部署的过程 但是 这里 我们可能会遇到一种情况 此时 我们服务器 java项目占用了 80端口 但我们需要放上去一个更重要的东西&am…...

java后端校验

Java 后端数据校验 一、概述 当我们想提供可靠的 API 接口&#xff0c;对参数的校验&#xff0c;以保证最终数据入库的正确性&#xff0c;是 必不可少 的活。比如下图就是 我们一个项目里 新增一个菜单校验 参数的函数&#xff0c;写了一大堆的 if else 进行校验&#xff0c;…...

PowerPoint如何修改“默认保存路径”?

很多时候&#xff0c;我们做好PPT后都要保存&#xff0c;一般会保存在创建PPT的文件夹里&#xff0c;或者另外设置保存的路径。 如果经常需要制作PPT&#xff0c;又不想每次都要重新选择保存位置&#xff0c;我们可以创建或修改“默认保存路径”&#xff0c;这样每次关闭PPT后…...

千问3.5-2B辅助MATLAB科学计算:算法实现与结果可视化脚本生成

千问3.5-2B辅助MATLAB科学计算&#xff1a;算法实现与结果可视化脚本生成 1. 科研计算的新助手 作为一名经常使用MATLAB的科研工作者&#xff0c;你是否遇到过这样的困扰&#xff1a;明明知道要解决什么数学问题&#xff0c;却卡在代码实现环节&#xff1f;或者花了大量时间调…...

终极指南:GitHub加速计划testing-samples测试工具链——从开发到部署的全流程自动化测试方案

终极指南&#xff1a;GitHub加速计划testing-samples测试工具链——从开发到部署的全流程自动化测试方案 【免费下载链接】testing-samples A collection of samples demonstrating different frameworks and techniques for automated testing 项目地址: https://gitcode.co…...

Intv_AI_MK11 处理时序数据:LSTM 思想在对话状态跟踪中的应用

Intv_AI_MK11 处理时序数据&#xff1a;LSTM 思想在对话状态跟踪中的应用 1. 引言&#xff1a;对话状态跟踪的挑战 在多轮对话系统中&#xff0c;准确跟踪对话状态是核心挑战之一。传统方法往往难以有效捕捉对话历史中的长期依赖关系&#xff0c;导致系统在复杂对话场景中容易…...

AI模型推理服务化:基于StructBERT构建高并发微服务架构

AI模型推理服务化&#xff1a;基于StructBERT构建高并发微服务架构 最近几年&#xff0c;AI模型从实验室走向生产环境的速度越来越快。很多团队都遇到过这样的场景&#xff1a;好不容易训练出一个效果不错的模型&#xff0c;比如一个文本分类或情感分析的模型&#xff0c;但当…...

DeepSeek-R1-Distill-Llama-8B行业落地:金融研报初稿生成与合规性校验辅助应用实践

DeepSeek-R1-Distill-Llama-8B行业落地&#xff1a;金融研报初稿生成与合规性校验辅助应用实践 1. 引言&#xff1a;金融分析师的新助手 如果你在金融行业工作&#xff0c;每天都要写各种研究报告&#xff0c;那你一定知道这个过程有多耗时耗力。从收集数据、分析趋势&#x…...

S2-Pro跨语言编程能力评测:根据中文注释生成多国语言代码

S2-Pro跨语言编程能力评测&#xff1a;根据中文注释生成多国语言代码 1. 评测背景与目标 在软件开发领域&#xff0c;跨语言编程能力正变得越来越重要。开发者经常需要在不同技术栈间切换&#xff0c;或者将一个语言的算法实现迁移到另一个语言。传统方式下&#xff0c;这需要…...

Go Routine 调度与系统线程分析

Go语言凭借其轻量级的并发模型在开发者中广受欢迎&#xff0c;而Go Routine作为其核心并发机制&#xff0c;与系统线程的交互方式一直是性能优化的关键。本文将深入分析Go Routine的调度原理及其与系统线程的关系&#xff0c;帮助开发者理解高并发场景下的底层运行机制&#xf…...

告别官方版SSE2坑!用linsys_pjsip 2.11.8在ARM32平台快速集成SIP与WebRTC AEC3

ARM32平台高效集成SIP与WebRTC AEC3&#xff1a;linsys_pjsip 2.11.8实战指南 在嵌入式音视频通信领域&#xff0c;ARM32架构设备因其低功耗和成本优势被广泛应用。但当你尝试在这些设备上部署PJSIP时&#xff0c;官方版本的SSE2指令集依赖就像一堵高墙&#xff0c;让许多开发者…...

OpenClaw智能搜索:Qwen3.5-9B支持的知识检索与摘要

OpenClaw智能搜索&#xff1a;Qwen3.5-9B支持的知识检索与摘要 1. 为什么需要智能搜索助手 作为一个经常需要查阅技术文档的研究者&#xff0c;我每天要花大量时间在不同平台间切换——打开浏览器搜索、翻阅PDF论文、在GitHub仓库里找示例代码。最头疼的是&#xff0c;当需要…...

fflate错误处理完全指南:如何优雅处理压缩异常

fflate错误处理完全指南&#xff1a;如何优雅处理压缩异常 【免费下载链接】fflate High performance (de)compression in an 8kB package 项目地址: https://gitcode.com/gh_mirrors/ff/fflate fflate是一个高性能的JavaScript压缩解压库&#xff0c;但在处理压缩数据时…...