我有这个问题: 编写一个函数is_member(),它接受一个值(即一个数字,字符串等)x和一个值列表a,如果x是a的成员则返回True,否则返回False。 (注意,这正是in运算符所做的,但是为了练习,你应该假装Python没有这个运算符。) 我的代码:
def is_member(a):
a = raw_input("Give a Number: ")
b = ['hallo', '120', 'me']
for i in a:
if a[i] == b:
return True
else:
return False
print is_member('a')
Mit IDLE控制台,我来了:TypeError:字符串索引必须是整数,而不是str。问题是什么? 。非常感谢您的帮助!
答案 0 :(得分:3)
您的a
是str
(字符串),接下来您使用for
循环来迭代该字符串的字符?
你可能想以相反的方式做到这一点。之一:
for i in b:
if a == i:
return True
return False
或者:
for i in range(len(b)):
if a == b[i]:
return True
return False
请注意return False
案例不能 else
:这不是因为第一次检查失败,其余检查最终不会产生等效的元素。因此,在确定元素不在列表中之前,您必须循环遍历整个集合。
答案 1 :(得分:1)
首先,如果您想使用raw_input
,则不需要is_member
参数,因为a
始终会成为raw_input
的返回值。< / p>
同样a
是string
,而不是list
,因此i
是string
。
例如:
>>> for i in 'abc':
... print(i)
...
a
b
c
is_member
应该是:
def is_member():
a = raw_input("Give a Number: ")
b = ['hallo', '120', 'me']
return a in b
print is_member()
或
def is_member(a):
b = ['hallo', '120', 'me']
return a in b
print is_member('a')
答案 2 :(得分:0)
你的问题是for循环设置>>> d = Dimension(1, 2)
>>> tuple(d)
(1, 2)
依次保持i
的值,所以当你引用a
时,它会尝试查找a[i]
,它显然不能。您只需将a['hallo']
替换为a[i]
,然后就可以完美运行。