求助:如何在Scratch中实现符合指定条件的密码验证器?
Scratch密码验证器实现方案
核心实现逻辑
放弃提前创建字符列表的思路,直接遍历密码的每个字符,通过字符范围判断归类,最后统一校验所有条件。这种方法比列表匹配更直观,也能解决你遇到的大小写区分问题。
步骤1:准备变量
创建以下变量(全部设为“适用于所有角色”):
用户密码:存储用户输入的密码包含大写字母、包含小写字母、包含数字、包含特殊字符:布尔型,初始值设为假当前位置:数字型,初始值设为1,用来遍历密码字符
步骤2:获取用户输入
添加积木:
当绿旗被点击 将[用户密码 v]设为(询问[请输入密码:]并等待)
步骤3:遍历并判断字符类型
用循环遍历密码的每一个字符,逐个判断所属类型:
将[包含大写字母 v]设为[假] 将[包含小写字母 v]设为[假] 将[包含数字 v]设为[假] 将[包含特殊字符 v]设为[假] 将[当前位置 v]设为[1] 重复执行直到(当前位置 > (长度of(用户密码))) 将[当前字符 v]设为(取第(当前位置)个字符of(用户密码)) // 判断大写字母 如果((当前字符) >= [A])且((当前字符) <= [Z])那么 将[包含大写字母 v]设为[真] // 判断小写字母 否则如果((当前字符) >= [a])且((当前字符) <= [z])那么 将[包含小写字母 v]设为[真] // 判断数字 否则如果((当前字符) >= [0])且((当前字符) <= [9])那么 将[包含数字 v]设为[真] // 剩下的就是特殊字符 否则 将[包含特殊字符 v]设为[真] 将[当前位置 v]增加(1)
注:Scratch的字符比较基于ASCII码,
A-Z、a-z、0-9的范围是连续的,所以直接用大小比较就能准确区分大小写和数字,解决你之前的大小写识别问题。
步骤4:校验所有条件并输出结果
把所有验证条件整合,判断密码是否有效,同时给出具体的错误提示:
如果((长度of(用户密码)) >= 8)且((长度of(用户密码)) < 18)且(包含大写字母)且(包含小写字母)且(包含数字)且(包含特殊字符)那么 说[密码有效!] 否则 说[密码无效,请满足以下条件:] 等待(1)秒 如果(长度of(用户密码) < 8)那么 说[· 至少8个字符] 等待(1)秒 如果(长度of(用户密码) >= 18)那么 说[· 字符数少于18个] 等待(1)秒 如果(不包含大写字母)那么 说[· 至少一个大写字母] 等待(1)秒 如果(不包含小写字母)那么 说[· 至少一个小写字母] 等待(1)秒 如果(不包含数字)那么 说[· 至少一个数字] 等待(1)秒 如果(不包含特殊字符)那么 说[· 至少一个特殊字符] 等待(1)秒
调试提示
如果还是出现判断错误,检查:
- 变量的初始值是否正确设为
假 当前位置的循环是否从1开始,并且每次加1直到超过密码长度- 字符比较时的引号是否是英文引号(Scratch里输入的字符要确保是英文半角)
内容的提问来源于stack exchange,提问作者Ayuuush69420
相关产品推荐
相关产品推荐

