【问题标题】:How value a List without IN operator没有 IN 运算符的列表如何赋值
【发布时间】:2017-01-17 14:58:05
【问题描述】:

我有这个问题: 编写一个函数 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: string indices must be integers, not str. 问题出在哪里?? .非常感谢您的帮助!

【问题讨论】:

  • 看文档,raw_input返回什么类型?您如何将其转换为intdocs.python.org/2/library/functions.html#raw_inputfor i in a 应该做什么?
  • 通常当规范说函数“接受一个值”时,这意味着有问题的值作为其参数之一传递给函数。这让我相信这应该是两个参数的函数(没有input 调用)
  • 可能是b[i] == aif(a in b)
  • @Arma 练习要求一个没有 IN 的值.....#
  • 停止编辑您的问题,以免格式损坏。

标签: python list function


【解决方案1】:

您的astr(字符串),接下来您使用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 Falseelse 的情况下不能:这不是因为第一个检查失败,其余检查最终无法产生元素那是等价的。因此,您必须循环整个集合,然后才能确定元素不在列表中*。

【讨论】:

  • 非常感谢您的回答和更正...请您解释一下,因为对于 b 中的 i 而不是 a 中的 i,我将学习 Python,而不仅仅是复制和粘贴... .
  • 我现在知道了,因为不能 a[i] 写,a 不是 List,正如你所说,一个字符串....,List 是 b...,非常感谢你的帮助!
  • @iratxe:没问题,我们是来帮忙的 :)
【解决方案2】:

首先,如果你想使用raw_input那么你不需要is_member的参数,因为a总是成为raw_input的返回值。

另外astring,而不是list,所以istring。 示例:

>>> 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')

【讨论】:

  • 虽然在 cmets 中指定了,但 OP 不应该使用in 运算符。
【解决方案3】:

您的问题是 for 循环将i 设置为依次保存a 的值,因此当您引用a[i] 时,它会尝试找到a['hallo'],但它显然无法找到。您只需将a[i] 替换为i,即可完美运行。

【讨论】:

    猜你喜欢
    • 2016-11-02
    • 2013-08-04
    • 2019-07-01
    • 2015-12-14
    • 1970-01-01
    • 1970-01-01
    • 2012-07-11
    • 1970-01-01
    相关资源
    最近更新 更多