IF声明真实情况

时间:2013-09-13 18:07:47

标签: 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

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

  
    
      

功能(“A& BCD”),结果为True。

    
  

有什么问题?

2 个答案:

答案 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的答案所示,但我把它放在那里告诉你如何做。