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

1 投票
4 回答
767 浏览
提问于 2025-04-18 17:56

这是我写的一个脚本,它可以生成6个1到49之间的随机数字,然后确保这些数字没有重复,最后打印出结果。这个功能都正常,但我想添加一个功能,可以打印出我想要的行数。现在的问题是,我只能让它打印出相同的数字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

我建议做两个改进。首先,在numbers里使用一个循环,来生成不重复的随机数字。然后在打印这些数字的时候,使用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()) )
1

那我们可以直接用内置的函数一次性搞定所有事情吗?

import random
random.sample(range(1,49),6)

示例输出

[45, 37, 24, 15, 38, 48]
1

根据定义,一个 set 不能包含重复的值。所以我会不断生成随机数字,尝试把它们加入到你的 set 中。一旦 set 的大小达到了 6,你就知道你有 6 个独特的值了。然后你可以打印出这个 set,或者把它转换成列表,或者随便你想怎么处理都可以。

import random
s = set()
while len(s) < 6:
    s.add(random.randint(1,49)) 

>>> s
set([2, 6, 10, 43, 13, 47])

这是一个函数,用来从1到 maxVal 的值中生成一个指定大小 setSizeset

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

首先,你应该使用 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)

撰写回答