我正在处理我的python脚本,因为我在循环之外创建了变量,因此我可以生成数字列表。我在生成数字列表时遇到问题。
当我尝试这个时:
def All_Channels(self):
#Pull the data from the database
channelList = list()
database_path =
xbmc.translatePath(os.path.join('special://userdata/addon_data/script.tvguide',
'source.db'))
if os.path.exists(database_path):
#get the channels list
cur.execute('SELECT channel FROM programs WHERE channel GROUP BY
channel')
for row in cur:
channels = row[0].encode('ascii')
channelList.append(channels)
# set the channels text
for index in range(0, CHANNELS_PER_PAGE):
channel = channelList[index]
channel_index = index
if channel is not None:
for channels_id in range(4127, 4547, 70):
for channels_start_end in range(69):
ID = channels_id + channels_start_end
print ID
我会得到这样的输出:
21:35:54 T:4724 NOTICE: 4545
21:35:54 T:4724 NOTICE: 4545
21:35:54 T:4724 NOTICE: 4545
21:35:54 T:4724 NOTICE: 4545
21:35:54 T:4724 NOTICE: 4545
21:35:54 T:4724 NOTICE: 4545
21:35:54 T:4724 NOTICE: 4545
输出应该是这样的:
我会得到这样的输出:
21:35:54 T:4724 NOTICE: 4127
21:35:54 T:4724 NOTICE: 4197
21:35:54 T:4724 NOTICE: 4267
21:35:54 T:4724 NOTICE: 4337
21:35:54 T:4724 NOTICE: 4407
21:35:54 T:4724 NOTICE: 4477
21:35:54 T:4724 NOTICE: 4547
问题在于此代码:
for channels_id in range(4127, 4547, 70):
for channels_start_end in range(69):
ID = channels_id + channels_start_end
print ID
请告诉我如何在循环外生成我想要的数字以及如何在循环外使用变量?
编辑:当我尝试这个时:
for channels_id in range(4127, 4547, 70):
print channels_id
我会得到这个:
00:30:28 T:6972 NOTICE: 4127
00:30:28 T:6972 NOTICE: 4197
00:30:28 T:6972 NOTICE: 4267
00:30:28 T:6972 NOTICE: 4337
00:30:28 T:6972 NOTICE: 4407
00:30:28 T:6972 NOTICE: 4477
缺少一个值为4547的值。
编辑:*更新1:
当我尝试使用它时:
# set the channels text
for index in range(0, CHANNELS_PER_PAGE):
channel = channelList[index]
channel_index = index
for channels_id in range(4127, 4548, 70):
ID = []
if channel is not None:
ID = channels_id
print ID
print channel
self.getControl(ID).setLabel(channel)
输出:
01:59:10 T:6768 NOTICE: 4547
01:59:10 T:6768 NOTICE: 4547
01:59:10 T:6768 NOTICE: 4547
01:59:10 T:6768 NOTICE: 4547
01:59:10 T:6768 NOTICE: 4547
01:59:10 T:6768 NOTICE: 4547
01:59:10 T:6768 NOTICE: 4547
它不会将值存储在循环之外,因为它将在行中获得相同的值7。
我想在for channels_id
循环下使用for index
的循环,这样我就可以在使用控件self.getControl(ID).setLabel(channel)
使用变量设置标签之前生成值列表我使用变量channel
生成值时在标签中设置的每个值ID
。我一直在问你如何将值存储在循环之外以供以后使用。如果您能提供帮助,请在您的回答帖子中更新您的代码。
答案 0 :(得分:3)
您已经可以访问循环外的变量。这就是为什么它打印4545
,而不是给你UnboundLocalError
或其他例外。
问题是"在循环之外"只发生一次,循环中的最后一个值。因此,您设置ID
,然后再次设置,然后再次设置69次,最后打印第69个值。如果要打印69个值中的每一个,则每次循环都必须这样做。而不是:
for channels_start_end in range(69):
ID = channels_id + channels_start_end
print ID
这样做:
for channels_start_end in range(69):
ID = channels_id + channels_start_end
print ID
或者,如果你想对所有69个值做一些事情,你必须将它们全部累加,例如,通过将它们添加到列表中,所以它们中的所有69个都可用,而不仅仅是最后一个:
IDs = []
for channels_start_end in range(69):
IDs.append(channels_id + channels_start_end)
print IDs
从您的评论中,您的问题似乎更简单。您不想打印所有值,只有每70个值。您已经在channels_id
中获得了每70个值。所以,只需print
:
for channels_id in range(4127, 4547, 70):
for channels_start_end in range(69):
ID = channels_id + channels_start_end
print channels_id
但实际上,你似乎没有使用ID
值做任何事情,或者对内部循环做任何有用的事情;而不是生成然后忽略每70个值中的69个,为什么不首先不生成它们?像这样:
for channels_id in range(4127, 4547, 70):
print channels_id
您的最后一个问题是该循环不包含4547
。
这是因为Python range
只包含值小于的停止值,而不是小于或等于它。有一个更简单的例子:
>>> for i in range(0, 3, 1):
... print i
0
1
2
请注意,它没有打印3
。
所以,您可以使用range(4127, 4548, 70)
或range(4127, 4617, 70)
(在您的用例中很难知道哪一个更多"自然"而不了解该用例是)获得你想要的所有价值。