Skip to main content
 首页 » 编程设计

python之如何从 python 列表中添加奇数

2025年05月04日8mq0036

编写一个接受整数列表作为参数的函数。您的函数应返回列表中所有奇数的总和。如果列表中没有奇数,您的函数应返回 0 作为总和。

def odd_numbers (my_list): 
    total = 0 
    count = 0 
    for number in my_list: 
        if (number % 2 == 1): 
            total = total + number  
        else: 
            count = count + 1 
    if (number == count): 
        return (0) 
    else: 
        return (total) 
 
#Main Program 
 
my_list = [] 
n = int(input("Enter the maximum length of a list: ")) 
while (len(my_list) < n): 
    item = input ("Enter integer value to the list: ") 
    my_list.append(item) 
print ("This is your list: ", my_list) 
result = odd_numbers(my_list) 
print (result) 

这是我的程序。当我执行它时,如果函数 odd_numbers 中的条件以及从我的主程序调用该函数时首先出现错误。我不明白这个错误的性质。它只是指出

TypeError: not all arguments converted during string formatting

请您参考如下方法:

问题是:当你这样做的时候

item = input("Enter integer value to the list: ") 

item 是一个字符串。它被存储在一个列表中,传递给 odd_numbers(),当你到达

if (number % 2 == 1): 

当它看到 str % something 时,它会尝试应用旧式字符串格式(例如,"%04d"% 3 结果为 "0003")。但是你的字符串没有任何格式说明符(没有 "%" 字符),所以它提示说参数比放置它们的地方多;-)

为避免这种情况,请确保将字符串转换为数字,即

item = int(input("Enter integer value to the list: ")) 

一个有点hacky的解决方案:

def sum_of_odd_numbers(lst): 
    return sum((i*(i%2) for i in lst), 0) 

或更具可读性的,

def sum_of_odd_numbers(lst): 
    return sum((i for i in lst if i%2), 0) 

或功能等价物,

def sum_of_odd_numbers(lst): 
    return sum(filter(lambda x: x%2, lst), 0)