【问题标题】:Python function not recognizing integersPython函数无法识别整数
【发布时间】:2018-08-08 23:28:12
【问题描述】:

我正在编写一个接受 3 个输入的函数,如果所有 3 个输入都是浮点数和/或整数,则返回 3 个的平均值,否则将它们作为列表返回。

这就是我所拥有的:

def list3(a,b,c):
    """if all inputs are int/float return average"""
    l = [a, b, c]
    for t in l:
        if t is int or t is float:
            s = sum(l)
            y = len(l)
            x = float(s/y)
            return x
        else:
            return(l)

当我输入 3 个整数时,它返回列表,我怎样才能让它将输入识别为整数?谢谢

【问题讨论】:

  • 如果你使用Python 3,那么float(s/y)是不必要的,因为除法的结果已经是一个浮点数。如果你使用 Python 2,那么float(s/y) 必须是float(s)/y,因为s/y 是一个不正确的整数。
  • “当我输入 4 个整数时”是什么意思?你传递四个参数吗? Python 不允许你这样做。

标签: python list numbers int


【解决方案1】:

这是一种方法:

def list3(a,b,c):
    """if all inputs are int/float return average"""
    l = [a, b, c]

    return sum(l)/len(l) if all(isinstance(t, (int, float)) for t in l) else l

list3(1, 2, 6)    # 3.0
list3('a', 1, 2)  # ['a', 1, 2]

说明

  • all(criteria for t in l) 在生成器表达式上应用惰性函数 all,它检查 l 中的所有项目是整数还是浮点数。
  • isinstance 通常比检查 type 更受欢迎。
  • if / else 子句可以替换为ternary statement

【讨论】:

    【解决方案2】:

    您可以使用异常处理。如果不是l 的所有元素都是数字,则会引发TypeError 异常:

    try:
        return float(sum(l)) / len(l) # Just in case it's Python 2.7
    except TypeError:
        return l
    

    【讨论】:

      【解决方案3】:

      使代码在 Python 2 或 3 中工作的最小更改:

      def list3(a, b, c):
          """if all inputs are int/float return average"""
          l = [a, b, c]
          s = 0
          for t in l:
              if type(t) is int or type(t) is float:
                  s += t
              else:
                  return l
          y = len(l)
          x = float(s) / y
          return x
      
      

      您只需要将 type(t) 与 int 或 float 进行比较,然后在除法之前将 s 转换为 float。您还必须在返回之前完成对所有列表成员的测试,否则 s = sum(l) 将在类似 [1, 'str', 6] 的情况下爆炸

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-11-01
        • 2018-03-26
        • 1970-01-01
        • 2012-02-12
        • 1970-01-01
        • 2022-06-14
        • 2011-07-10
        • 2017-06-04
        相关资源
        最近更新 更多