下面是我创建的一个脚本,它在1-49之间生成6个随机数,然后确保不匹配并打印结果,除了我想要添加一些行函数以打印出我想要的行之外,所有这些都工作得很好。这就是问题所在,我只能让它打印相同的数字5次,而不是5组不同的数字。
import random
def numbers():
global a,b,c,d,e,f
a = random.randint(1,49)
b = random.randint(1,49)
c = random.randint(1,49)
d = random.randint(1,49)
e = random.randint(1,49)
f = random.randint(1,49)
numbers()
while(a==b or a==c or a==d or a==e or a==f or b==c or b==d or b==e or b==f or c==d or c==e or c==f or d==e or d==f or e==f):
numbers()
sep = ' '
nums = 'Numbers: '+str(a)+sep+ str(b)+sep+str(c)+sep+str(d)+sep+str(e)+sep+str(f)
print nums这是否是最有效的方法,并有任何想法提出上述问题?
非常感谢
发布于 2014-08-20 16:59:54
首先,您应该在这个应用程序中使用random.sample。它在不替换的情况下选择数字,因此以后不需要进行任何唯一性检查。此函数获取要从中选择的元素列表和不替换的要选择的元素数。因为我们希望它从数字1到49中选择,所以我们可以使用range(1, 50)来创建这个列表。
第二,不要将每个数字保存在单独的变量中,只需在列表中返回。默认情况下,这就是random.sample返回它的方式,所以只需使用它。
第三,这里没有必要使用全局。只需从函数中返回数字列表,将其赋值给一个变量,然后使用它。
第四,对于打印,使用' '.join(list_of_strings)自动插入分隔符。当然,首先我们必须将random.sample返回的整数列表转换为字符串列表,这可以通过列表理解实现。此方法的优点是可以处理任意数量的数字,只要首先将它们存储在列表中即可。
把这一切加在一起:
import random
def random_numbers(n):
return random.sample(range(1, 50), n)
numbers = random_numbers(6)
numbers_str = ' '.join([str(num) for num in numbers])
print('Numbers: ' + numbers_str)我不知道“行数”的功能应该是什么。您是否只想重复上述操作多次?然后,您只需要重复上面的操作,不管重复多少次。
num_lines = 10
for i in range(num_lines):
numbers = random_numbers(6)
numbers_str = ' '.join([str(num) for num in numbers])
print('Numbers: ' + numbers_str)发布于 2014-08-20 16:54:25
根据定义,set不能包含任何非唯一值.因此,我会继续生成随机数,并试图添加到您的set。一旦set达到6大小,您就知道您有6唯一值。然后你可以打印你的集,或者转换成一个列表,或者你想用它做的任何事情。
import random
s = set()
while len(s) < 6:
s.add(random.randint(1,49))
>>> s
set([2, 6, 10, 43, 13, 47])作为一个函数,使一组特定大小的setSize从值1一直到maxVal
def makeRandomSet(setSize, maxVal):
s = set()
while len(s) < setSize:
s.add(random.randint(1,maxVal))
return s测试功能
>>> makeRandomSet(10, 30)
set([3, 5, 11, 14, 21, 23, 24, 25, 26, 29])发布于 2014-08-20 16:57:49
一次使用内置的函数如何?
import random
random.sample(range(1,49),6)样本输出
[45, 37, 24, 15, 38, 48]https://stackoverflow.com/questions/25410297
复制相似问题