编写一个接受整数列表作为参数的函数。函数应该返回列表中所有奇数的和。如果列表中没有奇数,则函数应返回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: not all arguments converted during string formatting
问题是:当你这样做的时候
item
是一个字符串。它存储在一个列表中,传递给odd_numbers()
,当您到达当它看到
str % something
时,它会尝试应用旧式字符串格式(例如,"%04d" % 3
会导致"0003"
)。但是字符串没有任何格式说明符(没有"%"
字符),因此它抱怨参数太多,无法放置;-)为了避免这种情况,请确保将字符串转换为数字
有点老套的解决方案:
或者更可读的
或者功能上的等价物
请尝试以下代码:
A.
raw_input
返回数据类型为string
的值,因此需要进行类型转换B.类型转换期间的异常处理如果用户从数字中输入任何其他字符,则上面的代码将引发需要处理的
ValueError
异常。例如
带异常处理的演示:
C.与实际算法相关
不需要变量逻辑。
b.返回值时不需要
if
循环。c.最好将函数号改为
sumOfOddNumbers
,即更有意义。演示:
D.使用list comprehension,sum方法,lambda函数,正如其他答案中提到的那样
E.运行以下代码的时间:
各自输出:
相关问题 更多 >
编程相关推荐