【问题标题】:Python "if" statement ignored [duplicate]Python“if”语句被忽略[重复]
【发布时间】:2013-01-29 10:40:27
【问题描述】:

可能重复:
Multiple conditions with if/elif statements

如果满足多个条件之一(“或”),我将在 Python 中的循环内触发循环。 该脚本似乎跳过了“if”语句并在不满足所需条件的情况下进入了内部循环。

代码

# Begin TestCase
# Main logic: execute RemoteController macro, if expected state == true, set 'Success', else: Fail
for macroname_n in range (32):
    handler("RemoteController", "SET", "[{0}_{1}_{2}]".format(testcase, macroname_n, platform), "")
    result = pbc_json(disk, testcase_area, testcase, platform, filename_n, coord_n)
    filename_n += 1
    coord_n += 1
    if macroname_n == 15 or 20:
        success_counter = 0
        for extra_loop in range(15):
            handler("RemoteController", "SET", "\"down 4\"", "")
            result = pbc_json(disk, testcase_area, testcase, platform, filename_n, coord_n)
            filename_n += 1
            if result >= 50:
                success_counter += 1
        if success_counter <> 15:
            result = 0

提前致谢!

【问题讨论】:

  • 你想说if macroname_n in (15, 20):if macroname_n == 15 or macroname_n == 20:

标签: python loops if-statement for-loop logical-operators


【解决方案1】:

这行不符合你的要求:

if macroname_n == 15 or 20:

解析如下:

if (macroname_n == 15) or (20):

由于20 在布尔上下文中始终为真,因此该语句始终为真。你真正想要的是这样的:

if macroname_n in (15, 20):

【讨论】:

    【解决方案2】:

    20 在布尔上下文中总是计算为true。因此,macroname_n == 15 or 20 始终为true

    你可能想写:

    if macroname_n == 15 or macroname_n == 20:
        success_counter = 0
        # ...
    

    【讨论】:

    • macroname in (15, 20)
    • @Paolo,当然,但是当只比较两个值时,一个元组真的值得吗?
    【解决方案3】:
    if macroname_n == 15 or 20:
    

    应该是:

     if macroname_n == 15 or macroname_n == 20:
    

    否则它将始终将 20 读取为 true。

    【讨论】:

      猜你喜欢
      • 2020-03-05
      • 2015-08-13
      • 2018-03-26
      • 1970-01-01
      • 1970-01-01
      • 2014-03-04
      • 1970-01-01
      • 1970-01-01
      • 2020-10-28
      相关资源
      最近更新 更多