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

如何在python中从列表中添加奇数?,python,python-2.7,python-3.x,functional-programming,Python,Python 2.7,Python 3.x,Functional Programming,编写一个接受整数列表作为参数的函数。函数应该返回列表中所有奇数的总和。如果列表中没有奇数,则函数应返回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

编写一个接受整数列表作为参数的函数。函数应该返回列表中所有奇数的总和。如果列表中没有奇数,则函数应返回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)
def奇数(我的列表):
总数=0
计数=0
对于my_列表中的编号:
如果(编号%2==1):
总数=总数+数量
其他:
计数=计数+1
如果(数字==计数):
返回(0)
其他:
报税表(总数)
#主程序
我的清单=[]
n=int(输入(“输入列表的最大长度:”)
while(len(my_list)
这是我的节目。当我执行它时,在函数奇数中的第一个if条件和从主程序调用函数时,会出现错误。我不能理解这个错误的本质。它只是说

TypeError:在字符串格式化过程中并非所有参数都已转换


您的代码可以使用Python2.7,但不能使用Python3.x,因为
input
函数在Python3中返回一个字符串。改变

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

也就是说,您还可以将功能缩短为:

def odd_numbers (my_list):
    total = 0
    for number in my_list:
        if (number % 2 == 1):
            total = total + number 
    return (total)

在学习Python中的列表理解/生成器表达式之后,您还可以使用@minitoto提供的生成器方法进行更多优化。

您的代码可以使用Python 2.7,但不能使用Python 3.x,因为
input
函数返回Python 3中的字符串。改变

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

也就是说,您还可以将功能缩短为:

def odd_numbers (my_list):
    total = 0
    for number in my_list:
        if (number % 2 == 1):
            total = total + number 
    return (total)

在学习Python中的列表理解/生成器表达式之后,您还可以使用@minitoto提供的生成器方法进行更多优化。

问题是:当您这样做时

item = input("Enter integer value to the list: ")
是一个字符串。它存储在一个列表中,传递给
奇数()

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)

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

item = input("Enter integer value to the list: ")
是一个字符串。它存储在一个列表中,传递给
奇数()

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)
试试这个:

def odd_number(list_):
  odd_nums = [nums for nums in list_ if nums % 2 != 0]
  if odd_nums:
    return sum(odd_nums)
  else:
    return 0

my_list = range(10)

print (odd_number(my_list))
试试这个:

def odd_number(list_):
  odd_nums = [nums for nums in list_ if nums % 2 != 0]
  if odd_nums:
    return sum(odd_nums)
  else:
    return 0

my_list = range(10)

print (odd_number(my_list))

A.
原始输入
返回数据类型为
字符串
的值,因此需要类型转换

>>> item = raw_input("Enter Number:")
Enter Number:2
>>> type(item)
<type 'str'>
>>> item = int(raw_input("Enter Number:"))
Enter Number:4
>>> type(item)
<type 'int'>
>>> 
带异常处理的演示:

>>> try:
...     item = int(raw_input("Enter Number:"))
... except ValueError:
...     print "Enter only digits."
... 
Enter Number:rt
Enter only digits.
C.与实际算法相关

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)
a。不需要
计数
变量逻辑

b。在返回值期间不需要
if
循环

c。最好将函数编号更改为
sumOfOddNumbers
,即更有意义

演示:

def sumOfOddNumbers (numbers_list):
    total = 0
    for number in numbers_list:
        if (number % 2 == 1):
            total += number 

    return total
D.其他答案中提到的用途、方法、功能

E.运行以下代码的时间:

lst = range(10000000)

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

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

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

def sumOfOddNumbers ():
    total = 0
    for number in lst:
        if (number % 2 == 1):
            total += number 

    return total

import time
start_time = time.time()
sum_of_odd_numbers1()
end_time = time.time()
print "Timing of sum_of_odd_numbers1:", end_time - start_time

start_time = time.time()
sum_of_odd_numbers2()
end_time = time.time()
print "Timing of sum_of_odd_numbers2:", end_time - start_time

start_time = time.time()
sum_of_odd_numbers3()
end_time = time.time()
print "Timing of sum_of_odd_numbers3:", end_time - start_time

start_time = time.time()
sumOfOddNumbers()
end_time = time.time()
print "Timing of sumOfOddNumbers:", end_time - start_time
各自的输出:

vivek:~$ python /home/vivek/workspace/vtestproject/study/timer.py
Timing of sum_of_odd_numbers1: 2.4171102047
Timing of sum_of_odd_numbers2: 1.73781108856
Timing of sum_of_odd_numbers3: 2.09230113029
Timing of sumOfOddNumbers: 1.42781090736

A.
原始输入
返回数据类型为
字符串
的值,因此需要类型转换

>>> item = raw_input("Enter Number:")
Enter Number:2
>>> type(item)
<type 'str'>
>>> item = int(raw_input("Enter Number:"))
Enter Number:4
>>> type(item)
<type 'int'>
>>> 
带异常处理的演示:

>>> try:
...     item = int(raw_input("Enter Number:"))
... except ValueError:
...     print "Enter only digits."
... 
Enter Number:rt
Enter only digits.
C.与实际算法相关

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)
a。不需要
计数
变量逻辑

b。在返回值期间不需要
if
循环

c。最好将函数编号更改为
sumOfOddNumbers
,即更有意义

演示:

def sumOfOddNumbers (numbers_list):
    total = 0
    for number in numbers_list:
        if (number % 2 == 1):
            total += number 

    return total
D.其他答案中提到的用途、方法、功能

E.运行以下代码的时间:

lst = range(10000000)

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

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

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

def sumOfOddNumbers ():
    total = 0
    for number in lst:
        if (number % 2 == 1):
            total += number 

    return total

import time
start_time = time.time()
sum_of_odd_numbers1()
end_time = time.time()
print "Timing of sum_of_odd_numbers1:", end_time - start_time

start_time = time.time()
sum_of_odd_numbers2()
end_time = time.time()
print "Timing of sum_of_odd_numbers2:", end_time - start_time

start_time = time.time()
sum_of_odd_numbers3()
end_time = time.time()
print "Timing of sum_of_odd_numbers3:", end_time - start_time

start_time = time.time()
sumOfOddNumbers()
end_time = time.time()
print "Timing of sumOfOddNumbers:", end_time - start_time
各自的输出:

vivek:~$ python /home/vivek/workspace/vtestproject/study/timer.py
Timing of sum_of_odd_numbers1: 2.4171102047
Timing of sum_of_odd_numbers2: 1.73781108856
Timing of sum_of_odd_numbers3: 2.09230113029
Timing of sumOfOddNumbers: 1.42781090736
请尝试以下代码:

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)
def read_int(msg):
n=无
n为无:
尝试:
n=int(输入(msg))
除值错误外:
打印(“您应该只输入整数值!”)
返回n
def奇数_编号(我的_列表):
总数=0
计数=0
对于my_列表中的编号:
如果(编号%2==1):
总数=总数+数量
其他:
计数=计数+1
如果(数字==计数):
返回(0)
其他:
报税表(总数)
#主程序
我的清单=[]
n=read_int(“输入列表的最大长度:”)
while(len(my_list)
尝试以下代码:

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)
def read_int(msg):
n=无
n为无:
尝试:
n=int(输入(msg))
除值错误外:
打印(“您应该只输入整数值!”)
返回n
def奇数_编号(我的_列表):
总数=0
计数=0
对于my_列表中的编号:
如果(编号%2==1):
总数=总数+数量
其他:
计数=计数+1
如果(数字==计数):
返回(0)
其他:
报税表(总数)
#主程序
我的清单=[]
n=read_int(“输入列表的最大长度:”)
while(len(my_list)