2

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

我的问题是关于“~!@#$%^&*”字符。如果我进入外壳:

函数(“A&BCD”),结果为真。

问题是什么?

4

2 回答 2

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
于 2013-09-13T18:10:53.800 回答
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 的回答所示,我们检查坏信的部分也是多余的,但我把它放在那里是为了向你展示如何去做。

于 2013-09-13T18:19:04.900 回答