我创建了一个函数来验证用户参数是否遵循规则(只有带有A,B,C,D字母的单词)。
for letter in var:
if letter == 'A' or letter == 'C' or letter == 'C' or letter == 'D':
return True
elif letter == "~" or letter == "!" or letter == "#" or letter == "$" or letter == "%" or letter == "^" or letter == "&" or letter == "*":
return False
else:
return False
我的问题是关于“〜!@#$%^& *”字符。如果我进入shell:
功能(“A& BCD”),结果为True。
有什么问题?
答案 0 :(得分:6)
该函数从头开始迭代字符串,因此它首先考虑'A'
。 'A'
满足第一个条件,因此函数返回True
。它不会继续,因为return
会立即结束包含return
语句的函数。
如果你希望你的函数只返回True
如果 all 输入的字符是有效的,那么在你检查完所有字符之前不要返回有效的情况:
for letter in var:
if letter not in 'ABCD':
# The input contains an invalid character; return immediately.
return False
# Otherwise, everything we've checked so far is OK, but the rest of the
# string might contain invalid characters. Keep going.
# The string had no invalid characters.
return True
答案 1 :(得分:0)
评论/取消注释您的python版本
的末尾的打印行def check_format(check_string):
validated = True
bad_letters = "~!@#$%^&*"
for letter in bad_letters:
if letter in check_string:
validated = False
break
if validated:
good_letters = "ABCD"
for letter in check_string:
if not letter in good_letters:
validated = False
break
return validated
print(check_format("A&BCD")) #python 3
#print check_format("A&BCD") #python 2
我们检查坏信的部分也是多余的,正如user2357112的答案所示,但我把它放在那里告诉你如何做。