【问题标题】:Python : "if" function does not work if the "if" statement have two conditionsPython:如果“if”语句有两个条件,则“if”函数不起作用
【发布时间】:2019-04-03 16:15:53
【问题描述】:

我正在使用 python 3.6,我写了这个:

zen = 1
zen2 = True
def test():
    if zen == 1 and zen2 == True:
        print ("hello")
        global zen2
        zen2 = False
    else:
        print ("hello 2")

test()

...输出什么都没有!纳达!没有“hello”也没有“hello 2”,甚至没有错误!

即使我这样做:

zen = 1
zen2 = True
def test():
    if zen == 1 :
        if zen2 == True:
            print ("hello")
            global zen2
            zen2 = False
        else:
            pass
    else:
        print ("hello 2")

test()

还是什么都没有!为什么?

编辑:对不起大家,在此之前我没有注意到“else”没有冒号,所以对于某些人来说,他们遇到了语法错误,现在可能已修复,但它仍然没有输出任何内容

编辑 2:这会很尴尬,因为我使用的是 PyCharm 并且我的另一个文件是打开的(在文件中,没有执行任何功能),我不小心运行了另一个文件而不是这个“zen”文件,所以我什么都没有,因为它。实际上,我从这个“zen”文件中得到了一个 SyntaxError,尽管我说这不是问题,但这篇文章确实帮助了我解决问题,它还提醒自己在做任何事情之前要仔细检查所有内容,所以,是的,感谢任何人帮了我:)

【问题讨论】:

  • 您的代码无法运行。
  • 无法复制。这会在发出语法警告后打印“hello”。
  • 您好,@JazzHandy 为了让我们帮助您,我们需要一个示例来重现您所看到的行为。本例我运行代码时,效果和你预期的一样:ideone.com/eE50Lw
  • Python2 中的 IIRC,test() 中使用的 zenzen2 将被视为全局变量。在 Python3 中,它们是局部变量,除非您专门将它们设为全局变量。您正在使用global,但为时已晚并且在错误的位置(在条件之后)。所以本地的zenzen2都得到None的默认值。
  • 我很惊讶有几个不同的 cmets 关于它是否运行。我得到:SyntaxError: name 'zen2' is used prior to global declaration。 @JazzHandy 这绝对是一个范围问题。

标签: python


【解决方案1】:

我认为这是您想要实现的目标:

def test(zen, zen2):
    if zen == 1 and zen2 == True:
        print ("hello")
        zen2 = False
    else:
        print ("hello 2")

test(1, True)

正如一些 cmets 建议的那样,如果有人尝试运行您的代码,它会返回以下内容(在 linux GCC 4.8.2/Python 3.6.1 上):

SyntaxError: name 'zen2' is used prior to global declaration

如果您想在第一次评估条件后更改打印的值,请将其重写如下:

def test(zen, zen2):
    if zen == 1 and zen2 == True:
        print ("hello")
        zen2 = False
        test(zen, zen2)
    else:
        print ("hello 2")

test(1, True)

【讨论】:

  • 我认为这不会完全符合他们的要求。 zen2 = False 建议他们希望后续调用的行为有所不同。但是,重新分配 zen2 参数不会有任何效果。
【解决方案2】:

解决方案 1:在函数中传递参数。

解决方案 2:在声明之前将“zen”和“zen2”声明为全局。

【讨论】:

    【解决方案3】:

    你有一些逻辑错误。 在使用 global 之前不能使用 zend2。 您应该将变量作为参数传递或在函数的第一行将它们声明为全局变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-25
      • 1970-01-01
      • 2011-10-10
      • 1970-01-01
      • 2019-07-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多