【问题标题】:List indices must be integers, not str , What are indices? How do I iterate the string?列表索引必须是整数,而不是 str ,什么是索引?如何迭代字符串?
【发布时间】:2016-02-26 00:12:59
【问题描述】:

我需要一些帮助。我不知道为什么会出现类型错误,列表索引必须是整数,而不是 str。我试图取 isbn 的第一个字符并将其乘以 10,然后将第二个字符乘以 9,依此类推。完成后,我需要确定总数是否为 11 的倍数。

isbn = ['0439202116']
count = 10
x = 0
for x in isbn:
    total = isbn[x] * count
    count -= 1
    x += 1
    if (total % 11 == 0):
        print(True)
    else:
        print(False)

【问题讨论】:

  • list[0], list[1], list[2]...这里1,2,3代表索引
  • 您不是在遍历isbn 列表中的字符串,而是遍历列表本身。 x 在第一次迭代中将是 '0439202116'
  • Rohit Jain,我如何迭代字符串?
  • 在python中使用for x in iterableObject时,你不必做x += 1。另外,不要使用 4 行来打印 TrueFalse,您可以只执行 print(condition) : print(tot % 11 == 0)

标签: python list indices


【解决方案1】:

以 isbn 作为字符串开头:

isbn = '0439202116'
count = 10
tot = 0
for x in isbn:
    tot += int(x) * count
    count -= 1

if tot % 11 == 0:
    print 'True'
else:
    print 'False'

我假设您只想测试最终总数的 11 的倍数

【讨论】:

  • 不要使用 4 行来打印 TrueFalse,您可以直接使用 print tot % 11 == 0
  • 真的,我尽量保持原汁原味
【解决方案2】:

您正在尝试遍历组合数字的字符串列表 - 它只会为您提供索引 0 处的项目。字符串中任何给定项目的 index 列表等指的是它在字符串中的位置,从0开始。索引,那么,指的是多个索引。 将您的初始字符串更改为包含 ISBN 的所有数字的元组,它可以正常工作。

isbn = (0,4,3,9,2,0,2,1,1,6)
count = 10
x = 0
for x in isbn:
    total = isbn[x] * count
    count -= 1
    x += 1
    if (total % 11 == 0):
        print(True)
    else:
        print(False)

这给了我一个输出:

True
False
False
False
False
True
False
False
False
False

【讨论】:

  • 我试图找到,(10*0 + 9*4 + 8*3 + 7*9 + 6*2 + 5*0 + 4* 2 + 3*1 + 2*1 + 1 * 6)然后我想看看总和是否是 11 的倍数。我想我需要做你在第一行所做的事情,但你能帮忙计算一下总数吗?应该只有一个结果。
  • 我还必须将 isbn 更改为 isbn = ['0', '4', '3', '9', '2', '0', '2', '1', '1', '6'] ,有没有办法做到这一点?使用字符串而不是 int,我似乎无法找到将其更改为 int 的方法
【解决方案3】:

如果您希望 isbn 列表中包含多个项目,这是一个更通用的解决方案。

isbn = ['0439202116', '0439202115']
for str in isbn:
    count = len(str)
    total = 0
    for ch in str:
        total += count * ord(ch)
        count -= 1
    print ("{0} => {1}" .format(str, total % 11 == 0))

输出:

0439202116 => True
0439202115 => False

【讨论】:

  • 还有一件事,我将如何更改您的代码以接受 isbn = ['0', '4', '3', '9', '2', '0', ' 2', '1', '1', '6']
  • 只需删除第一个for 循环并将str 更改为isbn
猜你喜欢
  • 1970-01-01
  • 2017-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-27
  • 2016-02-09
  • 1970-01-01
相关资源
最近更新 更多