从函数[Python]中的三个参数中找出最大的奇数

时间:2015-06-14 18:02:14

标签: python function

我需要编写一个函数,它将从三个输入参数中打印出最大的奇数。

这是我的代码。

def oddn(x,y,z):
odd_number_keeper = []
for item in x,y,z:
    global odd_number_keeper
    if item % 2==1:
        odd_number_keeper = [item]
        return max(odd_number_keeper)
    else:
        print 'No odd number is found'

我的代码似乎不起作用。我有什么想法可以修改这段代码吗?

5 个答案:

答案 0 :(得分:2)

需要进行一些更改:

def oddn(x,y,z):
    odd_number_keeper = []
    for item in [x,y,z]:
        if item % 2==1:
            odd_number_keeper.append(item)
    if not odd_number_keeper:
        print 'No odd number is found'
        return
    return max(odd_number_keeper)

迭代值xyz,并将奇数加到odd_number_keeper。如果有任何数字,则返回此奇数列表中的max()个元素。如果没有奇数,则打印该消息并返回(没有结果,因为没有要返回的数字)。

答案 1 :(得分:1)

您必须首先过滤所有奇数,然后调用max

def oddn(x,y,z):
    odd_numbers = [item for item in (x,y,z) if item%2==1]
    return max(odd_numbers)

或简称:

def oddn(*numbers):
    return max(x for x in numbers if x % 2 == 1)

如果您想在错误时打印一些消息,这也不是一个好习惯:

def oddn(*numbers):
    try:
        return max(x for x in numbers if x % 2 == 1)
    except ValueError:
        print 'No odd number is found'
        return None

答案 2 :(得分:0)

你没有找到列表中最大的奇数,而是找到第一个奇数并返回。问题在于 -

odd_number_keeper

首先,您需要将项目附加到列表中,只需将def oddn(x,y,z): odd_number_keeper = [] for item in x,y,z: if item % 2==1: odd_number_keeper.append(item) return max(odd_number_keeper) 列表包含在该项目中。

其次,return语句应该在函数的末尾,而不是在for循环中。

你需要一个像 -

这样的代码
mod <- list()
for (j in 5:36) {
  mod[[j]] <- glm(paste0(names(MegaData)[j], "/number~Unit*BeginYear*species_raw"),
                  family = binomial(link = logit), weight=number, data = MegaData)
  print(anova(mod[[j]]), test="Chisq")
  print(summary(mod[[j]]))
}

答案 3 :(得分:0)

您每次都要重置 odd_number_keeper 。你可能意味着

odd_number_keeper += [item]

returnprint也应位于for循环的末尾(外部)。 (请修改缩进以更清楚你的意图)。

答案 4 :(得分:0)

使用过滤器解决它。用pythonic方式做。

def oddn(a, b, c):
    final = []
    final.append(a)
    final.append(b)
    final.append(c)
    result = filter(lambda x: x % 2 != 0, final)
    return max(result)