【问题标题】:How do I Put 2 Conditions in an "if" Statement?如何在“if”语句中添加 2 个条件?
【发布时间】:2016-12-04 11:28:15
【问题描述】:

我正在尝试以某种方式设置一个函数,使其仅在满足两个条件时执行:如果变量大于某个值且小于另一个值。

我有两个函数来定义 start_time 和 end_time,以及一个处理文件的循环。正如您在我的if 语句中看到的那样,我正在尝试读取一个数字范围内的文件数据。但是,当我按照我的方式设置它时,我收到了这个错误:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

我不明白如何解决这个问题,尤其是因为我使用了两个变量(start_date、end_date:在前一个函数中都给定了一个数值)。

简而言之,如何使我想要的“if”语句成为可能?

编辑:另外,我希望忽略不符合条件的文件,如果我不写“else”语句,我不确定它们是否会被忽略.

【问题讨论】:

  • 你为什么不按照错误信息所说的去做?
  • 您的代码真的很难阅读。你对空格过敏吗?有意义的变量名?解释性 cmets?
  • 因为似乎没有任何关于如何使用它的解释与我的情况相匹配。不过,感谢您的帮助,我真的很感激@Marcin
  • if np.all( (start_date < juld) && (juld < end_date) ):
  • 为什么你的函数名周围都有这些井号?我什至没有……

标签: python function loops if-statement python-3.5


【解决方案1】:

错误是因为您将数组(又名juld)与数字进行比较。简而言之,您需要指定要检查的 if 语句的特定元素,或者使用错误消息中详述的 any()all() 方法。你可以找到这些方法的定义here

【讨论】:

    【解决方案2】:

    我不太明白你想在这里做什么,但有三个选项。如果您只想在数组中的所有值都满足的情况下进入该块,请使用 a.all(condition)。如果您想在任何值满足条件时进入,请使用 a.any(condition)。如果你想为满足值的数组的每个值进入块,你会这样做

    for x in array:
        if(condition):
            do stuff
        else:
            do other stuff
    

    【讨论】:

      【解决方案3】:

      问题是因为您将数组(即juld)与两个日期/数字start_dateend_date 进行比较。因此,您需要能够将数组更改为日期/数字。我看不到 juld 中的内容,但我怀疑您是否只是将代码更改为:

      if start_date<juld[0]<end_date:
      

      然后它将起作用,即以下工作(返回1):

      import datetime
      d1 = datetime.date(1996, 4, 1)
      d2 = datetime.date(2017, 7, 29)
      dt = datetime.date(2016, 7, 29)
      x = Read_Data(dt, d1 , d2)
      

      在哪里:

      def Read_Data(date, start_date, end_date):
          if start_date<date<end_date:
              return 1
      

      【讨论】:

      • 所以当你写 juld[0] 时,你将阈值设置为 0?当我使用 Julian Dates 时,我的值是 20,000,所以你能详细说明一下吗?谢谢
      • 让我检查一下np.array(ncfile.variables['JULD'][:]) 并恢复。
      • 您是否希望此调用中只有一个日期?:np.array(ncfile.variables['JULD'][:]) 如果是这样,则像print(juld) 一样打印出来如果您要查找的日期是该数组中的第 0 个元素,那么我上面写的解决方案是正确的。但是,如果您希望有多个日期并且想要在这些日期上执行操作,那么我建议您像 for each d in juld 这样遍历数组。我希望这有帮助!抱歉,您遇到了困难!
      • 没有完全解决问题,但它让我找到了一个更好的地方。感谢您抽出宝贵时间帮我解决这个问题,现在我只需要弄清楚您给我的东西应该放在哪里。
      【解决方案4】:

      首先,我认为您想查看juld 的最小值/最大值,因为它是一个数组。尝试类似:

      if max(juld) < start_date or min(juld) > end_date:
      

      我认为应该可以!

      【讨论】:

      • 谢谢,终于有了一个合理的答案,没有人给我投反对票,哈哈
      猜你喜欢
      • 1970-01-01
      • 2017-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-25
      • 1970-01-01
      • 2018-06-18
      • 2021-05-04
      相关资源
      最近更新 更多