这是我创建的脚本,在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
这是最有效的方法,以及上面提出的任何想法吗?
非常感谢
答案 0 :(得分:1)
根据定义,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])
作为一个函数,从值1到setSize
生成一定大小的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])
答案 1 :(得分:1)
如何使用内置函数一次完成所有操作?
import random
random.sample(range(1,49),6)
示例输出
[45, 37, 24, 15, 38, 48]
答案 2 :(得分:1)
首先,您应该将random.sample
用于此应用程序。它无需替换就可以选出数字,因此以后不需要进行任何唯一性检查。此函数包含可供选择的元素列表以及无需替换即可选择的元素数。由于我们希望从数字1到49中选择,我们可以使用range(1, 50)
来创建该列表。
其次,不要将每个数字保存在单独的变量中,只需将其返回到列表中即可。这是random.sample
默认返回的方式,所以只需使用它。
第三,没有必要在这里使用全局变量。只需返回函数中的数字列表,将其分配给变量,稍后再使用。
第四,要进行打印,请使用' '.join(list_of_strings)
自动插入分隔符。当然,首先我们必须将random.sample
返回的整数列表转换为字符串列表,我们可以使用list comprehension。只要您首先将它们存储在列表中,此方法就可以使用任意数量的数字。
把所有这些放在一起:
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)
答案 3 :(得分:0)
我建议两项改进。在numbers
中使用while循环生成唯一的随机数。然后使用sep.join
函数打印它们。
import random
def numbers():
n = []
while len(n)<6:
x = random.randint(1,49)
if x not in n:
n.append(x)
return n
sep = ' '
for row in range(5):
print( 'Numbers: '+ sep.join(str(x) for x in numbers()) )