对“心理学测本命专业”程序的实现与算法的简要分析

1 测评程序链接

心理学测测你的本命专业

2 思考程序逻辑在哪里控制
实验目的
探究程序测评结果的逻辑在客户端还是在服务端?

实验猜测
猜测一为用户答题完成后,客户端界面将答题过程发给服务器,服务器再将测评结果返回给客户端。程序测评逻辑在服务端实现。
猜测二为用户答题完成后,测评的逻辑在客户端实现。

实验过程
(1).在连网情况下,进入程序初始页面。
(2).待程序初始页面加载完成后,断网。
(3).答题直到题目结束。观察是否可以获取测评结果。

实验过程
在断网后,题目界面的文字和图片均完整显示,并且可以获取测评结果。

实验结论
猜测二正确。"心理学测测你的本命专业"程序的测评逻辑在客户端实现。

3 程序是如何实现的?
(1). 在Edge浏览器中打开心理学测测你的本命专业,按f12调出浏览器的开发者工具。
Edge浏览器开发者工具界面

(2). 在界面左侧中进行答题,观察右侧console的输出。console中显示在index.tsx:63行中输出了答题信息,在index.tsx:32行中输出测评结果得出的专业名称的拼音。
答题过程中console的输出

(3). 打开index.tsx页面,发现是两个页面,分析两个index.tsx的代码。

输出答题信息的index.tsx页面实现的功能:
* 对当前题目答题的输入规范进行限制。
* 进入下一题。

输出答题结果的index.tsx页面实现的功能:
* 数据格式处理。
* 定义“专业”数组。
* 数组数据到专业的映射处理。

(4). 在答题结果的index.tsx页面的代码中发现result()函数得出测评结果,该函数在result.js中。打开result.js页面,分析getResult()函数。

  getResult()函数:
      输入:10道题目的答题选项数组。
      输出:一个int值。该int值就是专业数组的下标。
      功能:根据用户答题选项,得出本命专业。

实现过程:

  1. 定义每题每个选项映射的专业。
  2. 将所有答题结果结果映射的专业合并到result。
  3. 遍历result,将专业作为key,它出现的频次的频次作为value,存入到result_map中。
  4. 在result_map中取最先出现最大频次的专业作为最终结果。当结果中存在多个最大值时,程序用了result.shuffle()来打乱result,这样使得result_map中最先出现最大频次的专业不一定,所以结果可能是多种。
姓名 专业 性别 题目选项 测评结果
zz jk [A,A,B,A,B,A,E,E,"政治、数学", 任意选项] 经济学:2/3,法学:1/3
posted @ 2021-05-29 20:04  张宵  阅读(175)  评论(0编辑  收藏  举报