IF声明真实情况

jNe*_*Nek 2 if-statement python-3.x

我做了一个函数来验证用户参数是否遵循规则(只有带有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
Run Code Online (Sandbox Code Playgroud)

我的问题是关于"〜!@#$%^&*"字符.如果我进入shell:

功能("A&BCD"),结果为True.

问题是什么?

use*_*ica 6

该函数从头开始迭代字符串,因此它'A'首先考虑.'A'满足第一个条件,所以函数返回True.它不会继续,因为return立即结束包含该return语句的函数.

如果您希望函数仅True所有输入字符都有效时返回,则在检查完所有字符之前不要返回有效情况:

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
Run Code Online (Sandbox Code Playgroud)