2015-08-18 634 views
-2
factor = int(input("Which table would you like: ")) 
timestable = ([0,0]) 
for count in range(1,13): 
    timestable.append([0,0]) 
    result = factor * count 
    timestable[count][0] = count 
    timestable [count][1] = result 
for row in timestable: 
    print(row) 

这是一个程序,它允许用户输入一个时间表并打印出1 *号码为12 *的数字。但每当我去运行代码,我得到这个错误信息:错误消息TypeError:'int'对象不支持项目分配

timestable[count][0] = count  
TypeError: 'int' object does not support item assignment 

有谁知道我必须在我的代码改变?

+0

您初始化timestable是一个2元素的列表(括号没有做任何事情在这里),然后在循环的每一步中追加2元素列表。因此,timestable变成类似'[0,0,[0,0],[0,0],[0,0],...]'。你要么寻找'extend',要么想要将timestable初始化为'timestable ='[[0,0]]'。 – Evert

回答

0

正如评论中指出的那样,问题是行timestable = ([0,0])初始化timestable只是[0, 0]。因此,在您的第一个append,timestable看起来像这样:[0, 0, [0, 0]]而不是[[0, 0], [0, 0]],并且timestable[count]后面的值不是新添加的[0,0],而是从初始化开始的第二个0

也许你想创建一个拥有列表的单元组,但是你必须使用([0,0],)(注意尾随逗号),但是这对你也不会有任何好处,因为你不能追加元组。相反,您应该将其初始化为嵌套列表。此外,您可以通过不首先附加零并重写这些零来缩短循环体,而是直接附加正确的值。

timestable = [[0,0]] 
for count in range(1, 13): 
    timestable.append([count, factor * count]) 

但是,您根本不需要单独的初始化和循环;你的只是一个单一的列表理解创建timestable(注意这里,从0range开始):

timestable = [[count, factor * count] for count in range(0, 13)] 
相关问题