《跟老卫学仓颉编程语言开发》实战:猜数字游戏
以前中央电视台财经频道推出过一档大型演播室互动娱乐节目《购物街》,该节目里面包含了一个叫做“高了低了”的游戏环节。笔者非常喜爱这个游戏。这个游戏环节设置了八个百元价位左右的商品,首先选手要选择编号1-8的商品,之后猜这个商品的价格。在选手猜价格的过程中,主持人会给出高了、低了的提示,直到帮助选手猜出正确价格为止。之后继续选择,以此类推,直到30秒时间到为止。
本节所要介绍的猜数字游戏也是类似的,程序给出一个1到100之间的随机整数,让用户猜。用户猜一个数并输入到程序,然后程序会提示猜测是大了还是小了。如果猜对了,它会打印祝贺信息并退出。
本节通过仓颉语言,来开发一个简单的猜数字游戏,综合运用了流程控制、标准输入、字符串的操作、整型的比较等知识。
本节示例可以在“guessing_game”应用下找到。
输入数字
在程序界面输入数字代表用户猜数字的实现。如何实现在程序界面输入数字?这里就需要用到std.console
包,该模块包含许多在执行输入和输出时需要的常见操作。
import std.console.* // 标准输入流(stdIn)读取一行 let line = Console.stdIn.readln() var lineStr = line.getOrThrow();
上述代码实现了通过标准输入(stdIn)读取一行文本的功能。当然,还需要将读入的本文,转为整型数字,代码如下:
import std.convert.* // 字符串转为整型 let guess: Int64 = Int64.parse(lineStr); println("You guessed: ${guess}");
convert包提供从字符串转到特定类型的Convert系列函数。上述例子中,Int64.parse()接口用于实现将Int64类型字面量的字符串转换为Int64值的相关操作函数。
比较大小
比较大小的流程控制,可以采用前面章节所学习的if-else语句,代码如下:
// 被猜的数字 let secret_number = 41; // 比大小 if (guess == secret_number) { println("You win!"); break; } else if (guess < secret_number) { println("Too small!"); } else { println("Too big!"); }
上述代码,比较输入的数字guess与被猜的数字secret_number比较大小。
- 如果guess小于secret_number,则提示输入的数字太小了;
- 如果guess大于secret_number,则提示输入的数字太大了;
- 如果guess等于secret_number,则说明猜中,退出程序。
循环输入
如果没有猜中,程序应该支持循环输入。这里,我们用到了while循环。完整程序代码如下:
/// 猜数字游戏 import std.console.* import std.convert.* main() { println("Guess the number! 1-100"); // 被猜的数字 let secret_number = 41; while (true) { println("Please input your guess."); // 标准输入流(stdin)读取一行 let line = Console.stdIn.readln() var lineStr = line.getOrThrow(); // 字符串转为整型 let guess: Int64 = Int64.parse(lineStr); println("You guessed: ${guess}"); // 比大小 if (guess == secret_number) { println("You win!"); break; } else if (guess < secret_number) { println("Too small!"); } else { println("Too big!"); } } }
运行效果
运行程序,输入数字进行猜测,运行效果如下:
Guess the number! 1-100 Please input your guess. 3 You guessed: 3 Too small! Please input your guess. 50 You guessed: 50 Too big! Please input your guess. 45 You guessed: 45 Too big! Please input your guess. 35 You guessed: 35 Too small! Please input your guess. 40 You guessed: 40 Too small! Please input your guess. 42 You guessed: 42 Too big! Please input your guess. 41 You guessed: 41 You win!
参考引用
免费开源书《跟老卫学仓颉编程语言开发》,源码见:https://github.com/waylau/cangjie-programming-language-tutorial

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
如何准确获取 MySQL 主从延迟时间?
背景 MySQL 5.7 已于 2023 年 10 月 EOL,但仍然有大量的生产环境依赖此版本。本文撰写时间 2025 年 3 月。 不久前,在一套采用 MySQL 5.7 作为部署版本的生产环境中,由于业务执行了大规模事务,进而引发了 MySQL 主从复制的延迟,最终暴露出数据一致性方面的严重问题。 由于业务做了读写分离,从库读取的数据与主库不一致,影响了应用逻辑。业务团队提出明确需求:需要知道主从延迟的具体时间值,以评估影响并优化系统。 请读者思考一下: 1. 如何获取主从延迟时间值? 2. 如何判断获取的值是准确的? 随后我们分析了 MySQL 5.7 的内置指标 Seconds_Behind_Master 的可靠性,并探索更精准的替代方案。 Seconds_Behind_Master 可靠吗? Seconds_Behind_Master 是 SHOW SLAVE STATUS 输出中的字段,表示从库应用二进制日志事件时落后主库的秒数。 理论上,值为 0 表示从库已同步,较高的值则反映延迟。 实际上,你会发现该指标与真实延迟数值不符:数据明显差异时显示 0 或出现与复制性能无关...
- 下一篇
万字长文解读MCP框架,让你掌握mark3labs/mcp-go
一、引言 在 《万字长文,带你读懂 Anthropic MCP》中我们介绍了MCP的基本框架和组件,并初步说了在golang中的框架metoro-io/mcp-golang和mark3labs/mcp-go。本文将通过实践和源码的方式先解读mark3labs/mcp-go。 二、MCP-Server的简述 MCP Server一般为轻量的服务端程序,通过一种标准的协议(MCP)暴露出特定资源的一些特定的能力。 2.1 连接生命周期 2.1.1 初始化连接 客户端发送带有协议版本和功能initialize请求。 服务器以其协议版本和功能进行响应 客户端发送initialized通知作为确认 开始正常信息交换 2.1.2 信息交换 初始化后,支持以下模式: 请求-响应:客户端或服务器发送请求,对方响应 通知:任何一方发送单向消息 2.1.3 终止 enum ErrorCode { // Standard JSON-RPC error codes ParseError = -32700, InvalidRequest = -32600, MethodNotFound = -326...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- SpringBoot2全家桶,快速入门学习开发网站教程
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS8编译安装MySQL8.0.19
- CentOS7,CentOS8安装Elasticsearch6.8.6
- SpringBoot2配置默认Tomcat设置,开启更多高级功能