2013-10-25 38 views
0

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

import random 

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

mySet = set(r) 

然而,当我试图运行程序,它说,“‘廉政’没有迭代”。

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

+0

你应该包括你得到的错误 – joaquin

+0

我回答了你的问题,但我不打算为你做功课。 –

+0

只是fyi它可能不是一个好主意,发布链接到您的任务在未来的TA和教授也使用太...而发布作业的哲学是非常分裂 –

回答

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一个类型,像listdict的对象。因此,当你从random.choice传递int时,它会给你一个错误,因为它需要一个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是什么和它的作用很重要。 Documentation

+2

使用'randint'时明显好于'random.choice(range(...))',你应该尝试解释OP得到错误信息。 – sloth

+0

@大师灯XiHuan更正。谢谢你。 –

+0

downvote的原因是什么? –

5

set()需要一个迭代器(一个列表或元组是可迭代的)作为它的参数,其中提供了一个整数。

2

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

3

如果您想要选择从一组随机物品(有固定大小):

list = random.sample(your_set, size); 

,或者如果你想选择一个具有任意大小的随机物品:

size = random.randint(0, your_set_size): 
list = random.sample(your_set, size): 
0

基于assigment的描述,您不需要用某些东西初始化set。您只应在每个测试中添加set中的元素,并检查set的大小和插入次数。

这就是为什么初始化应该是这样的: 进口随机

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

附:您的代码初始化不正确

0

您有错误,因为您是从int创建一个set对象。 一组应该从迭代创建(如表)不是一个单一的对象:

所以不是这样: MYSET =设置(R) 你应该这样做: MYSET =设置([R])

为什么不按照作业中的注释?

注 对于每个测试,应使用Random.randint挑0和365之间的一个数 使用表示一个生日

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

相关问题