自定义字符检查函数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
相关产品推荐
相关产品推荐

