If statement IF语句真值条件

If statement IF语句真值条件,if-statement,python-3.x,If Statement,Python 3.x,我制作了一个函数来验证用户参数是否遵循规则(仅限带有a、B、C、D字母的单词) 我的问题是关于“~!@$%^&*”字符。如果我在shell中输入: 函数(“A&BCD”),结果为真 问题出在哪里?函数从一开始就迭代字符串,因此它首先考虑'A''A'满足第一个条件,因此函数返回True。它不会继续运行,因为return会立即结束包含return语句的函数 如果希望函数仅在所有输入字符都有效的情况下返回True,则在检查所有字符之前,不要返回有效大小写: for letter in var:

我制作了一个函数来验证用户参数是否遵循规则(仅限带有a、B、C、D字母的单词)

我的问题是关于“~!@$%^&*”字符。如果我在shell中输入:

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


问题出在哪里?

函数从一开始就迭代字符串,因此它首先考虑
'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

注释/取消注释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

正如用户2357112的回答所示,我们检查坏信的部分也是多余的,但我把它放在那里是为了告诉您如何做。

您检查了两次字母C,但没有检查一次字母B。谢谢您的帮助!我现在明白了
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