我希望能够创建一个获取列表的函数,检查列表中的每个项目是否属于某种类型(一次一个项目),如果是,则执行计算。对于这个特定的函数,我想计算整数列表的乘积。
我的功能:
def multpoly(items):
typeInt = []
total = 1
for i in list:
if type(i) is int:
total = total * i
elif type(i) is str:
typelist.append(i)
elif type(i) is list:
typelist.append(i)
return total
return listInt
items = [1,2,3,4,5]
stringitems = ["1","2","3"]
listitems = [[1,1],[2,2]]
print(multpoly(items))
print(multpoly(stringitems))
print(multpoly(listitems))
我还希望能够创建相同的函数,将列表更改为字符串列表并加入它们,并将列表更改为列表列表并将它们连接起来。
此当前功能不起作用。我收到一个错误 - “'type'对象不可迭代”。
如果有人可以提出修复建议或者可以解释发生了什么事情就会很棒! :)
答案 0 :(得分:2)
您正在尝试迭代list
,但参数名为items
。此外,i
将是int
,但实际上不是int
本身;您需要isinstance(i, int)
或type(i) is int
。最后,您无法将str
添加到int
(total
);如果任何项目不是int
时目标是失败,则需要在类型检查失败时处理(否则您将跳过该项,但仍报告列表是全部整数)。您可能希望代码更像这样:
# This uses the Py3 style print function, accessible in Py2 if you include
from __future__ import print_function
# at the top of the file. If you want Py2 print, that's left as an exercise
class NotUniformType(TypeError): pass
def multpoly(items):
total = 1
for i in items:
if not isinstance(i, int):
raise NotUniformType("{!r} is not of type int".format(i))
total *= i
return total
try:
print(multpoly(items), "Items in list are integers"))
except NotUniformType as e:
print("Items in list include non-integer types:", e)