首页 > 其他分享 >go 语言实战入门案例之猜数字

go 语言实战入门案例之猜数字

时间:2023-08-03 13:33:48浏览次数:38  
标签:实战 rand guess 入门 fmt Println secretNumber go input

文章和代码已经归档至【Github仓库:<https://github.com/timerring/backend-tutorial> 】或者公众号【AIShareLab】回复 go 也可获取。

猜数字

第一个例子里面,我们会使用 Golang 来构建一个猜数字游戏。

在这个游戏里面,程序首先会生成一个介于 1 到 100 之间的随机整数,然后提示玩家进行猜测。玩家每次输入一个数字,程序会告诉玩家这个猜测的值是高于还是低于那个秘密的随机数,并且让玩家再次猜测。如果猜对了,就告诉玩家胜利并且退出程序。

go 语言实战入门案例之猜数字_随机数

package main

import (
	"fmt"
	"math/rand"
)

func main() {
	maxNum := 100
	secretNumber := rand.Intn(maxNum)
	fmt.Println("The secret number is ", secretNumber)
}

通过尝试可以发现,每次生成的随机数都是一样的。

go 语言实战入门案例之猜数字_随机数_02

通过查看文档,可知随机数的生成会使用到一个随机种子。

go 语言实战入门案例之猜数字_随机数_03

否则每一次都会生成相同的随机数序列。一般用启动的时间戳来初始化随机数种子。这里使用 time.now.unix 来初始化随机种子。

package main

import (
	"fmt"
	"math/rand"
	"time"
)

func main() {
	maxNum := 100
	rand.Seed(time.Now().UnixNano())
	secretNumber := rand.Intn(maxNum)
	fmt.Println("The secret number is ", secretNumber)
}

go 语言实战入门案例之猜数字_随机数_04

然后实现用户输入输出,并理解析成数字。

每个程序执行的时候都会打开几个文件,stdin stdout stderr 等,stdin 文件可以用 os.Stdin 来得到。然后直接操作这个文件很不方便,我们会用 bufio.NewReader 把一个文件转换成一个 reader 变量。

reader 变量上有用来操作流的操作,可以用它的 ReadString 方法读取一行。如果失败会打印错误并能退出。ReadString 返回的结果包含结尾的换行符,把它去掉再转换成数字。如果转换失败,我们同样打印错误,退出。

package main

import (
	"bufio"
	"fmt"
	"math/rand"
	"os"
	"strconv"
	"strings"
	"time"
)

func main() {
	maxNum := 100
	rand.Seed(time.Now().UnixNano())
	secretNumber := rand.Intn(maxNum)
	// fmt.Println("The secret number is ", secretNumber)

	fmt.Println("Please input your guess")
	reader := bufio.NewReader(os.Stdin)
	for {
		// `reader` 变量上有用来操作流的操作,可以用它的 `ReadString` 方法读取一行。
		input, err := reader.ReadString('\n')
		if err != nil {
			fmt.Println("An error occured while reading input. Please try again", err)
			continue
		}
		// `ReadString` 返回的结果包含结尾的换行符,把它去掉。
		input = strings.Trim(input, "\r\n")
		// 再转换成数字
		guess, err := strconv.Atoi(input)
		if err != nil {
			fmt.Println("Invalid input. Please enter an integer value")
			continue
		}
		fmt.Println("You guess is", guess)
		if guess > secretNumber {
			fmt.Println("Your guess is bigger than the secret number. Please try again")
		} else if guess < secretNumber {
			fmt.Println("Your guess is smaller than the secret number. Please try again")
		} else {
			fmt.Println("Correct, you Legend!")
			break
		}
	}
}

参考:字节内部课 Go 语言原理与实践

标签:实战,rand,guess,入门,fmt,Println,secretNumber,go,input
From: https://blog.51cto.com/u_15736437/6948415

相关文章

  • go 语言实战入门案例之命令行排版词典
    文章和代码已经归档至【Github仓库:<https://github.com/timerring/backend-tutorial>】或者公众号【AIShareLab】回复go也可获取。命令行排版的词典先看一下用到的API,以彩云科技提供的在线翻译为例。请打开彩云翻译的网页,然后右键检查打开浏览器的开发者工具。此时我们点一下......
  • go 语言实战入门案例之实现Socks5
    文章和代码已经归档至【Github仓库:<https://github.com/timerring/backend-tutorial>】或者公众号【AIShareLab】回复go也可获取。实现Socks5代理介绍socks5协议它虽然是代理协议,但它并不能用来翻,它的协议都是明文传输。这个协议历史比较久远,诞生于互联网早期。它的用途是,......
  • play连接mongodb并进行查询测试
    环境准备1、 IP白名单分组添加2、 相关配置信息 application.conf增加 morphia.db.name=库名morphia.db.url=连接信息dependencies.yml增加require:-playmongo->playmongolatest.integration-org.mongodb->mongo-java-driver3.12.13-org.mongodb.m......
  • 整数加法小程序(新人入门)
     #include<stdio.h>intmain(){ printf("本程序为整数求和程序\n"); intnum1=0; intnum2=0; intsum=0; printf("请输入第一个整数:"); scanf_s("%d",&num1); printf("请输入第二个整数:"); scanf_s("%d",&num2);......
  • Google官方出品的Android App反编绎工具-Enjarify
    enjarify是由Google官方新出品的基于Python3开发,类似dex2jar的一个将Dalvik字节码转换成相对应的Java字节码开源工具,官方宣称有比dex2jar更优秀的兼容性,准确性及更高的效率。IntroductionEnjarifyisatoolfortranslatingDalvikbytecodetoequivalentJavabytecode.Thisal......
  • Redis从入门到放弃(7):主从复制
    1、概念主从复制是Redis的一项重要特性,用于将一个Redis服务器(Master主节点)的数据复制到其他Redis服务器(Slave从节点),以实现数据的高可用性和读写分离。数据的复制是单向的,只能由主节点到从节点。2、作用主从复制在Redis中扮演着重要的角色,带来了以下几个主要的作用:高可用性:......
  • [数据分析与可视化] Python绘制数据地图4-MovingPandas入门指北
    MovingPandas是一个基于Python和GeoPandas的开源地理时空数据处理库,用于处理移动物体的轨迹数据。它提供了一组强大的工具,可以轻松地加载、分析和可视化移动物体的轨迹。通过使用MovingPandas,用户可以轻松地处理和分析移动对象数据,并从中提取有关行为、模式和趋势的见解。无论是处......
  • django自定义错误补获
    settings.pyREST_FRAMEWORK={'EXCEPTION_HANDLER':'xxx.custom_exception_handler',}新建.py文件,名称任意 xxx.pyfromdjango.dbimportDatabaseErrorfromrest_frameworkimportstatusfromrest_framework.responseimportResponsefromrest......
  • [回馈]ASP.NET Core MVC开发实战之商城系统(五)
    经过一段时间的准备,新的一期【ASP.NETCoreMVC开发实战之商城系统】已经开始,在之前的文章中,讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页【商品类型,banner条,友情链接,降价促销,新品爆款】,商品列表页面,商品详情等功能的开发,今天继续讲解购物车功能开发,仅供学习......
  • 小柏实战学习FineBI(图文教程一)
    前言:一定要知道百度,必应,谷歌这个三个网站,这三个不知道的话也要会使用ChatGPT,并且要学会看报错信息,学会优雅的提问.  本节课主题:FineBI的下载,安装,配置. 零:官网填写信息,获取试用码:https://www.finebi.com/  一:下载:https://www.finebi.com/product/downlo......