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

新手上路,请多包涵

编写一个接受整数列表作为参数的函数。您的函数应返回列表中所有奇数的总和。如果列表中没有奇数,您的函数应返回 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:并非所有参数都在字符串格式化期间转换

原文由 Karan Thakkar 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 576
2 个回答

问题是:当你这样做时

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)

原文由 Hugh Bothwell 发布,翻译遵循 CC BY-SA 3.0 许可协议

试试这个代码:

 def read_int(msg):
    n = None
    while n is None:
        try:
            n = int(input(msg))
        except ValueError:
            print("You should enter only integer values!")
    return n

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 = read_int("Enter the maximum length of a list: ")

while (len(my_list) < n):
    item = read_int("Enter integer value to the list: ")
    my_list.append(item)

print ("This is your list: ", my_list)
result = odd_numbers(my_list)
print (result)

原文由 Joao Luiz Cadore 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题