编写一个接受整数列表作为参数的函数。您的函数应返回列表中所有奇数之和。如果列表中没有奇数,则函数应返回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中的if条件发生错误,以及当我从主程序中调用该函数时出现错误。我无法理解此错误的性质。它只是说


  TypeError:在字符串格式化期间并非所有参数都已转换

最佳答案

问题是:当您这样做时

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: "))




一个有点古怪的解决方案:

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)

关于python - 如何从python中的列表中添加奇数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35355521/

10-14 19:01
查看更多