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

自定义字符检查函数containsspec()失效问题求助

猜词游戏Hangman中containsspec()函数失效原因排查

问题背景

开发Hangman猜词游戏时,需要验证用户输入满足:5个字符及以上,不含空格、特殊字符或数字。在实现containsspec()函数后,输入含特殊字符的内容时,程序未按预期提示输入无效。

相关代码

主游戏文件

#text-based hangman project

#import defined functions from fun.py
from fun import *

#get player1 input and validate that it's at least five characters long, with no numbers or spaces
print("Please select any word with five characters or more:")

c = 0
while c == 0:
    w = getpass.getpass(prompt = "")
    w = list(w)
    if len(w) < 5 or containsnumber(w) or containsspace(w) or containsspec(w):
        print("Your input is invalid. Please try again.")
    else:
        print("Got it - thank you!")
        c += 1

函数文件(fun.py)

#contains functions for 1.py

import getpass

def containsnumber(value):
    for character in value:
        if character.isdigit():
            return True
    return False

def containsspace(value):
    for character in value:
        if character == " ":
            return True
    return False

def containsspec(value):
    for character in value:
        if character.isalnum():
            return False
    return True

问题原因

containsspec()函数的逻辑完全与预期相反:

  • 当前逻辑:遍历字符时,只要遇到任意一个字母/数字(character.isalnum()为True),就立即返回False;只有当所有字符都不是字母数字时,才返回True。
  • 预期逻辑:只要遇到任意一个非字母数字的特殊字符,就返回True;所有字符都是字母数字时返回False。

举个例子:输入hello!,函数遍历到第一个字符h时,h.isalnum()为True,直接返回False,导致主程序中containsspec(w)为False,不会触发输入无效的提示,但实际上输入包含特殊字符!,应该被判定为无效。

修正方案

修改containsspec()函数的判断逻辑,检查字符是否不是字母数字:

def containsspec(value):
    for character in value:
        if not character.isalnum():
            return True
    return False

这样,只要输入中有任意一个特殊字符(非字母数字),函数就会返回True,主程序的条件判断会正确触发输入无效的提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 18:54:27