You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么Python用户名过滤代码会输出@等不符合规则的特殊字符?

问题原因分析
  • 核心错误出在字符校验的条件逻辑:你写的(c for c in word if (c.isalnum() or c == '_' or c == '-'))是生成器表达式,在Python中,任意非空的生成器对象的布尔判断结果都是True,完全不会执行你预期的「所有字符都符合规则」的校验逻辑,相当于这个校验条件直接失效,因此带特殊符号的@smith也能通过判断。
  • 额外冗余判断:你添加的' ' not in word条件没有必要,只要字符校验逻辑正确,空格本身就不属于允许的字符范围,会被直接过滤。
修复后的代码
usernames = input().split(', ')

for word in usernames:
    if 3 <= len(word) <= 16 and all(c.isalnum() or c in ('_', '-') for c in word):
        print(word)
逻辑说明
  • 用all()函数包装生成器表达式,只有遍历word的所有字符都满足「是字母/数字/是_/是-」的要求时,才会返回True,否则直接返回False阻断后续逻辑。
  • 修复后运行你提供的测试输入,输出结果完全符合预期。

内容的提问来源于stack exchange,提问作者prsnr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 01:36:08