Python终端游戏用户名字符过滤功能失效问题求助
问题分析与修复
你的代码没达到预期效果,核心问题和修复点如下:
- 你把允许的字符存在了列表里,但判断单个字符是否属于列表时,实际是在判断这个字符是不是列表里的某一个完整元素(比如判断'a'是不是等于"0123456789"或者大小写字母组合字符串),这显然永远不成立。应该把所有允许的字符合并成一个字符串。
- 代码里用了中文引号“”,Python会识别成非法字符,必须换成英文引号""。
- 变量名用了
filter,这是Python的内置函数名,容易引发冲突,建议改成allowed_chars这类更安全的名字。 - 用while循环加索引的方式遍历字符太繁琐,直接遍历每个字符更直观清晰。
修正后的代码
# Python3 import string username = input("Username = ") allowed_chars = string.digits + string.ascii_letters + "_" for char in username: if char not in allowed_chars: print("Error, inappropriate username.") break else: # 循环正常结束(未被break中断)说明所有字符合法 print("Success with 0 errors.")
补充说明
string.digits对应数字字符串"0123456789",string.ascii_letters是大小写字母的组合字符串,将它们与"_"拼接后,就得到了所有允许的字符集合。- for循环后的else块是Python特有语法,只有当循环未被break中断时才会执行,刚好匹配我们判断全量字符合法的需求。
内容的提问来源于stack exchange,提问作者Ian
相关产品推荐
相关产品推荐

