我想从一个集合中得到一个随机值。下面是我的代码,它不起作用。在
我得到了一个错误:
File "/usr/lib/python2.7/random.py", line 320, in sample raise ValueError("sample larger than population") ValueError: sample larger than population
我不知道这意味着什么。我想得到一个整数,这样我就可以把这个整数加到一个集合中。因此,我将N
从一个集合中随机选择元素放入另一个集合中。在
def getRandomBook():
bookset = getBookSet()
random_number = random.sample(bookset,1)
print random_number[0]
return_number = random_number[0]
return return_number
def getBookSet(sales_input=open("data/sales_3yr.csv", "r")):
sales = csv.reader(sales_input)
bookID = set()
lineNumber = 0
for line in sales:
id = line[6]
if lineNumber<>0:
bookID.add(eval(id))
lineNumber=1
return bookID
这意味着您的集合是空的,并且集合是空的,因为您的
getBookSet()
函数将从之前已被读取的file对象中读取。在您将打开文件作为函数定义的一部分,这意味着您只能读取一次。不要对每次调用函数时都要求值的表达式使用函数默认参数。见"Least Astonishment" and the Mutable Default Argument。在
请执行以下操作:
现在,每次调用函数时,函数都会打开file对象,并再次从第一个字节开始读取。
sales_input
参数现在是一个不可变的字符串,用于在运行函数时而不是在定义函数时打开file对象。在纠正一些其他问题:
^{pr2}$next()
调用将为我们拉入第一行(头),并且在sales
上的任何进一步循环将从下一行继续。在<>
;它已被弃用。您可以测试if lineNumber
或if lineNumber > 0
或{int()
或float()
可以的时候,不要使用eval()
。在相关问题 更多 >
编程相关推荐