Python随机Int脚本帮助 - 打印行数

时间:2014-08-20 16:51:34

标签: python random

这是我创建的脚本,在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

这是最有效的方法,以及上面提出的任何想法吗?

非常感谢

4 个答案:

答案 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()) )