赞
踩
目录
比较简单的一个小玩意,之前就写过一个,还发到B站了,中途修bug的时候还捣鼓出来了一个新式的奇偶性判断的方法(具体可以看我发的文章),但现在看来纯纯的屎山,所以再写一个新版的
软件运行原理如下:
取随机数0-3,根据不同数字决定数字、汉字、英文还是符号
根据对应数字,调用对应子程序,在常量中随机选取一个字符
上面的步骤无限循环,直至满足长度为止
在对应位置用强行插入的文本替换掉对应长度的文本
对应的名称在下面,大家按照顺序放组件(这样可以直接抄走代码)
按照从上而下,由左至右的叙述方式,分别是:
标签1,编辑框1
标签2,编辑框2
标签3,编辑框3
选择框1,选择框2,选择框3,选择框4,按钮1
标签4,编辑框4
创建一个按钮1被单击的子程序(鼠标左键按下也行)
输入取随机数代码
- .版本 2
-
- .程序集 窗口程序集_启动窗口
-
- .子程序 _按钮1_被单击
- .局部变量 数字, 整数型
-
- 置随机数种子 ()
- 数字 = 取随机数 (0, 3)
- .如果真 (数字 = 0 且 选择框1.选中 = 真)
- 中文 ()
- .如果真结束
- .如果真 (数字 = 1 且 选择框2.选中 = 真)
- 英文 ()
- .如果真结束
- .如果真 (数字 = 2 且 选择框3.选中 = 真)
- 数字 ()
- .如果真结束
- .如果真 (数字 = 3 且 选择框4.选中 = 真)
- 符号 ()
对应的创建子程序:
- .版本 2
-
- .子程序 中文
-
-
-
- .子程序 英文
-
-
-
- .子程序 数字
-
-
-
- .子程序 符号
-
-
新建一个常量,叫做“汉字”,把准备好的汉字复制进去
这里使用的是这篇文章归纳的汉字
回到程序集,新建一个程序集变量“结果”和“生成次数”,类型为文本型和整数型
在子程序“中文”中写下面的代码:
- .版本 2
-
- .子程序 中文
- .局部变量 文字, 文本型
-
- 置随机数种子 ()
- 文字 = 取文本中间 (#汉字, 取随机数 (0, 6996), 2)
- 结果 = 结果 + 文字
- 生成次数 = 生成次数 + 1
其中,0-6996的取值范围应当适当调整,即0—#汉字的文本长度-2
子程序执行完毕,变量“结果”添加了一位字符,把变量给编辑框4.内容(按钮单击反馈事件的结尾)
编辑框4.内容 = 结果
运行软件,发现需要按一下或者多下按钮才能生成一个汉字
那么,就应当使得生成一直持续下去直到某个特定长度
那么就使用“判断循环首”命令
“_按钮1_被单击”子程序下的代码变成这样:
- .版本 2
-
- 置随机数种子 ()
- .判断循环首 (生成次数 ≠ 到数值 (编辑框3.内容)+1)
- 数字 = 取随机数 (0, 3)
- .如果真 (数字 = 0 且 选择框1.选中 = 真)
- 中文 ()
- .如果真结束
- .如果真 (数字 = 1 且 选择框2.选中 = 真)
- 英文 ()
- .如果真结束
- .如果真 (数字 = 2 且 选择框3.选中 = 真)
- 数字 ()
- .如果真结束
- .如果真 (数字 = 3 且 选择框4.选中 = 真)
- 符号 ()
- .如果真结束
-
- .判断循环尾 ()
- 编辑框4.内容 = 结果
- 结果 = “”
最后加上结果=“”,将内容清除,下一次就从0开始
下面运行一下,欸,出问题了——
可以看到,生成结果里混入了特殊字符和无法显示的字符
这个问题很好解释,每个中文都是两字节的,但我们取随机数就可能从某个汉字的一半去读取
如下图:
这个问题也很好解决,首先要新建一个程序集变量“随机数”,把取随机数单独拎出,如图:
下面就是最重要的一步,输入下面这段“魔咒”
这个方法之前的文章里也出现过,是用来判断奇偶性的
这行代码是一个变式,会把任何数值转换为奇数
这样一来就能稳定的生成汉字啦
英文挺好写的,把中文拿过来改一改就好了
要注意这里随机数取到51是因为我的英文常量里包含了大小写
- .版本 2
-
- .子程序 英文
- .局部变量 文字, 文本型
- .局部变量 随机数, 整数型
-
- 置随机数种子 ()
- 随机数 = 取随机数 (0, 51)
- 文字 = 取文本中间 (#英文, 随机数, 1)
- 结果 = 结果 + 文字
- 生成次数 = 生成次数 + 1
数字符号就更好写了,直接ctrl+c上面的内容然后再ctrl+v并且修改修改:
- .版本 2
-
- .子程序 数字
- .局部变量 文字, 文本型
- .局部变量 随机数, 整数型
-
- 置随机数种子 ()
- 随机数 = 取随机数 (0, 9)
- 文字 = 取文本中间 (“1234567890”, 随机数, 1)
- 结果 = 结果 + 文字
- 生成次数 = 生成次数 + 1
-
- .子程序 符号
- .局部变量 文字, 文本型
- .局部变量 随机数, 整数型
-
- 置随机数种子 ()
- 随机数 = 取随机数 (0, 31)
- 文字 = 取文本中间 (#符号, 随机数, 1)
- 结果 = 结果 + 文字
- 生成次数 = 生成次数 + 1
符号常量如下:
~!@#$%^&*()_+=-`';":[]{}\|?><,./
写完这些就能跑啦
等等,怎么只能用一次
哈哈哈,是不是没看出来呢,上面的代码里缺少了一个关键的东西
加上箭头指的试试
结果清零了,次数怎么能不清零呢?
前面就看出来的同学在评论区发“不愧是我”
强制插入在上一个版本中直接是子文本替换,所以当选择中文时会关闭这项功能,因为可能会出现乱码(之前你们也了解过了原理了)
但是这个版本,我要加入对中文的支持!
肯定不能简单的取文本长度()了
哼哼~看神器:
- .版本 2
-
- .子程序 取字符数, 整数型
- .参数 文本, 文本型
- .局部变量 长度, 整数型
- .局部变量 代码, 整数型
- .局部变量 字符位置, 整数型
- .局部变量 实际长度, 整数型
-
- 长度 = 取文本长度 (文本)
- 实际长度 = 长度
- 字符位置 = 1
- .判断循环首 (字符位置 ≤ 长度)
- .如果 (取代码 (取文本中间 (文本, 字符位置, 1), ) < 0)
- 字符位置 = 字符位置 + 2
- 实际长度 = 实际长度 - 1
- .否则
- 字符位置 = 字符位置 + 1
- .如果结束
-
- .判断循环尾 ()
- 返回 (实际长度)
这个绝妙的主意当然不是我想出来的啦
是在当时找资料的时候无意间在吾爱上发现的一篇文章
这样就好啦,再在按钮单击的事件处理子程序里改一改:
- .版本 2
- .支持库 spec
-
- .子程序 _按钮1_被单击
- .局部变量 数字, 整数型
-
- 置随机数种子 ()
- .判断循环首 (生成次数 ≠ 到数值 (编辑框3.内容) + 1)
- .如果真 (编辑框1.内容 ≠ “” 且 生成次数 = 到数值 (编辑框2.内容))
- 调试输出 (生成次数)
- 结果 = 结果 + 编辑框1.内容
- 生成次数 = 生成次数 + 取字符数 (编辑框1.内容) + 1
- 到循环尾 ()
- .如果真结束
- 数字 = 取随机数 (0, 3)
- .如果真 (数字 = 0 且 选择框1.选中 = 真)
- 中文 ()
- .如果真结束
- .如果真 (数字 = 1 且 选择框2.选中 = 真)
- 英文 ()
- .如果真结束
- .如果真 (数字 = 2 且 选择框3.选中 = 真)
- 数字 ()
- .如果真结束
- .如果真 (数字 = 3 且 选择框4.选中 = 真)
- 符号 ()
- .如果真结束
-
- .判断循环尾 ()
- 编辑框4.内容 = 结果
- 结果 = “”
- 生成次数 = 0
运行一下看看,是不是成功了
顺带提一嘴,为了防止用户输入特别大的数字导致软件不能移动,最好在判断循环尾()上方加 处理事件 ()
写这个软件还是需要注意一些细节的,否则容易出bug
这个软件要注意的无非就两个:
1.一定需要一种生成方式
2.强制插入结尾位置不能超出文本范围
- .版本 2
-
- .如果真 (选择框1.选中 = 假 且 选择框2.选中 = 假 且 选择框3.选中 = 假 且 选择框4.选中 = 假)
- 信息框 (“请选择至少一种生成方式!”, 0, “错误:”, )
- 返回 ()
这个加到哪里你自己应该也清楚的
这里使用返回(),避免执行下面的内容
这个也挺简单的,给你们放出来看看吧
- .版本 2
-
- .如果真 (到数值 (编辑框2.内容) + 取字符数 (编辑框1.内容) > 到数值 (编辑框3.内容))
- 信息框 (“强制插入文本的范围超出了生成长度!”, 0, “错误:”, )
- 返回 ()
软件代码(.e文件)会绑定资源,直接下载就好
不过还是想放出来
- .版本 2
-
- .程序集 窗口程序集_启动窗口
- .程序集变量 结果, 文本型
- .程序集变量 生成次数, 整数型
-
- .子程序 _按钮1_被单击
- .局部变量 数字, 整数型
-
- .如果真 (选择框1.选中 = 假 且 选择框2.选中 = 假 且 选择框3.选中 = 假 且 选择框4.选中 = 假)
- 信息框 (“请选择至少一种生成方式!”, 0, “错误:”, )
- 返回 ()
- .如果真结束
- .如果真 (到数值 (编辑框2.内容) + 取字符数 (编辑框1.内容) > 到数值 (编辑框3.内容))
- 信息框 (“强制插入文本的范围超出了生成长度!”, 0, “错误:”, )
- 返回 ()
- .如果真结束
- 置随机数种子 ()
- .判断循环首 (生成次数 ≠ 到数值 (编辑框3.内容) + 1)
- .如果真 (编辑框1.内容 ≠ “” 且 生成次数 = 到数值 (编辑框2.内容))
- 结果 = 结果 + 编辑框1.内容
- 生成次数 = 生成次数 + 取字符数 (编辑框1.内容) + 1
- 到循环尾 ()
- .如果真结束
- 数字 = 取随机数 (0, 3)
- .如果真 (数字 = 0 且 选择框1.选中 = 真)
- 中文 ()
- .如果真结束
- .如果真 (数字 = 1 且 选择框2.选中 = 真)
- 英文 ()
- .如果真结束
- .如果真 (数字 = 2 且 选择框3.选中 = 真)
- 数字 ()
- .如果真结束
- .如果真 (数字 = 3 且 选择框4.选中 = 真)
- 符号 ()
- .如果真结束
- 处理事件 ()
- .判断循环尾 ()
- 编辑框4.内容 = 结果
- 结果 = “”
- 生成次数 = 0
-
- .子程序 中文
- .局部变量 文字, 文本型
- .局部变量 随机数, 整数型
-
- 置随机数种子 ()
- 随机数 = 取随机数 (0, 6995)
- 随机数 = 取整 (随机数 ÷ 2) × 2 + 1
- 文字 = 取文本中间 (#汉字, 随机数, 2)
- 结果 = 结果 + 文字
- 生成次数 = 生成次数 + 1
-
- .子程序 英文
- .局部变量 文字, 文本型
- .局部变量 随机数, 整数型
-
- 置随机数种子 ()
- 随机数 = 取随机数 (0, 51)
- 文字 = 取文本中间 (#英文, 随机数, 1)
- 结果 = 结果 + 文字
- 生成次数 = 生成次数 + 1
-
- .子程序 数字
- .局部变量 文字, 文本型
- .局部变量 随机数, 整数型
-
- 置随机数种子 ()
- 随机数 = 取随机数 (0, 9)
- 文字 = 取文本中间 (“1234567890”, 随机数, 1)
- 结果 = 结果 + 文字
- 生成次数 = 生成次数 + 1
-
- .子程序 符号
- .局部变量 文字, 文本型
- .局部变量 随机数, 整数型
-
- 置随机数种子 ()
- 随机数 = 取随机数 (0, 31)
- 文字 = 取文本中间 (#符号, 随机数, 1)
- 结果 = 结果 + 文字
- 生成次数 = 生成次数 + 1
-
-
- .子程序 取字符数, 整数型
- .参数 文本, 文本型
- .局部变量 长度, 整数型
- .局部变量 代码, 整数型
- .局部变量 字符位置, 整数型
- .局部变量 实际长度, 整数型
-
- 长度 = 取文本长度 (文本)
- 实际长度 = 长度
- 字符位置 = 1
- .判断循环首 (字符位置 ≤ 长度)
- .如果 (取代码 (取文本中间 (文本, 字符位置, 1), ) < 0)
- 字符位置 = 字符位置 + 2
- 实际长度 = 实际长度 - 1
- .否则
- 字符位置 = 字符位置 + 1
- .如果结束
-
- .判断循环尾 ()
- 返回 (实际长度)
-
- .版本 2
-
- .常量 汉字, "<文本长度: 6998>"
- .常量 英文, "<文本长度: 52>"
- .常量 符号, "<文本长度: 32>"
常量具体内容见上
特别感谢下列文章(帖子)与作者:
易语言取字符个数 例子 非文本长度 - 『编程语言区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn
个人主页:
B站主页:
小狄同学呀的个人空间-小狄同学呀个人主页-哔哩哔哩视频 (bilibili.com)
另外通知:
我即将开展易语言系列课程的更新,计划是一条条代码的给大家讲明白
也请期待一下吧~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。