【问题标题】:IF statement truth conditionIF 语句真值条件
【发布时间】:2013-09-13 18:07:46
【问题描述】:

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

function("A&BCD"),结果为真。

有什么问题?

【问题讨论】:

  • 你检查字母 C 两次,但字母 B 没有一次。

标签: if-statement python-3.x


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 感谢您的帮助!我现在明白了
    猜你喜欢
    • 2012-02-24
    • 1970-01-01
    • 1970-01-01
    • 2016-10-03
    • 2014-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    相关资源
    最近更新 更多