我需要编写一个函数,它将从三个输入参数中打印出最大的奇数。
这是我的代码。
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'
我的代码似乎不起作用。我有什么想法可以修改这段代码吗?
答案 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)
迭代值x
,y
和z
,并将奇数加到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]
return
和print
也应位于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)