0

对于我的家庭作业,我应该随机选择列表中的项目。到目前为止,我有这个代码,

import random

room = range(0, 365)
r = random.choice(room)

mySet = set(r)

但是,当我尝试运行该程序时,它说“'int' 是不可迭代的”。

我想知道如何解决这个问题?

4

6 回答 6

5

set()需要一个可迭代对象(列表或元组是可迭代对象)作为其参数,您提供了一个整数。

于 2013-10-25T13:13:16.810 回答
3

如果您想从一组中选择随机项目(固定大小):

list = random.sample(your_set, size);

或者如果你想选择随机大小的随机项目:

size = random.randint(0, your_set_size):
list = random.sample(your_set, size):
于 2013-10-25T13:15:02.860 回答
2
However, when I attempt to run the program, it says that " 'int' is no iterable".

I was wondering how I can fix this problem?

使用randint

>>> from random import randint
>>> randint(0, 360)
86
>>> var = randint(0, 360)
>>> isinstance(var, int)
True

set实际上是python中的一种类型,类似listor的对象dict。因此,当您传入intfromrandom.choice时,它会给您一个错误,因为它需要 a list,您可以循环的东西是一个iterable对象。因此,例如:

>>> set([1,3,4,5,2])
set([1, 2, 3, 4, 5])

会工作,但你试图做的是:

>>> set(1)  # 1 is used as a number here
Traceback (most recent call last):
  File "<console>", line 1, in <module>
TypeError: 'int' object is not iterable

如果你想创建一个随机列表,你可以这样做:

>>> [randint(0, 360) for _ in xrange(10)]
[234, 122, 294, 71, 204, 360, 359, 318, 273, 212]

上面的代码创建了 10 个随机整数供您使用。如果你想要一个set,你可以使用这个set函数来得到一个,但我认为了解它是什么 set以及它的作用对你来说很重要。文档

于 2013-10-25T13:12:30.570 回答
2

您的集合中也只有一个值,因此您只有一件事可以迭代。random.choice在这种情况下,只返回序列中的单个元素为 int。这不是 python 错误的原因(int 不可迭代,如 sneeu 所说),但会导致与您正在寻找的结果不同的结果。random.sample可能是更好的选择

于 2013-10-25T13:14:38.437 回答
0

您有一个错误,因为您正在从 int 创建一个集合对象。应该从可迭代(如列表)而不是单个对象创建集合:

所以不是这个:mySet = set(r) 你应该这样做:mySet = set([r])

你为什么不按照你的作业笔记?

注释 对于每个测试,您应该使用 Random.randint 选择一个介于 0 和 365 之间的数字来代表生日

randint() 返回一个随机整数,而无需创建列表,这是您正在使用的函数所需要的 :choice()

于 2013-10-25T13:34:42.857 回答
0

根据assignment的描述,你不需要用一些东西来初始化set。您应该只在每个测试中添加集合中的元素并检查集合的大小和插入次数。

这就是为什么 init 应该是这样的:import random

    room = range(0, 365)
    mySet = set()

PS您在初始化下面的代码不正确

于 2013-10-25T13:32:45.757 回答