Python - 生成5位不重复数字的随机数

4

我将要打印一个没有重复数字的随机5位数,并要求用户输入一个三位数。如果用户输入的数字包含随机数中的三个数字,则打印“正确”。

我正在使用以下代码生成随机数:

num = random.randint (0,99999)
print (num)

问题在于它不会总是打印出五位数。
此外,我不知道如何将用户数字与随机数字匹配。
谢谢。

看起来使用字符串或由单个数字组成的列表会非常容易。你尝试过吗? - Random Davis
1
你看过这篇帖子吗?https://dev59.com/y3E85IYBdhLWcg3wqVT4 - Afaq
你想要一个像“00498”这样的5位随机字符串,还是想要一个5位随机整数,例如“47832”?第二种情况只需要更改randint()的第一个参数。 - Preston Martin
@PrestonM OP说不要有重复数字,所以我会理解为后一种选项。 - Random Davis
1
零可以作为前导数字吗? - Preston Martin
显示剩余2条评论
4个回答

12

随机取样 0 到 9 的数字:random.sample

''.join(random.sample('0123456789', 5))

他要求没有重复的数字,但并没有要求没有重复的数字。这可能意味着“121”是可以接受的,但“112”不行。虽然我们需要询问原帖发布者以确保。 - Jeffrey Phillips Freeman
@JeffreyPhillipsFreeman - 这意味着“没有连续重复的数字”。值得在问题中请求澄清。但我不认为仅在这里断言有价值。 - tdelaney
在这里进行断言的价值在于希望您前往原始帖子进行跟进。我没有提交任何答案,因此个人不需要澄清。但是,无论如何,我都会点赞您的答案。 - Jeffrey Phillips Freeman
@JeffreyPhillipsFreeman - 那只会让我成为你问题的第三方。我已经学会避免三角形了! - tdelaney
你需要担心的是方块,它们从来不知道如何享受乐趣! - Jeffrey Phillips Freeman
或者,你可以使用 range() 来代替一个长字符串。random.sample(range(0,10),5) - Sergiy Kolodyazhnyy

0
使用zfill和set,如下所示:已编辑以考虑具有重复数字的数字
import random


def threeInFive(user_num):
    num = str(random.randint(0, 99999)).zfill(5)
    num = ''.join(set([n for n in num]))
    if len(num) < 5:
        print "There were repeating digits...trying again"
        threeInFive(user_num)
    elif str(user_num) in num:
        print "The user number is in there!"
        return True
    else:
        print "The user number : %s is not in : %s" % (user_num, num)
        return False

threeInFive(500)

2
OP说不能有重复数字,所以填零会违反这个规定,不是吗? - Random Davis
啊,你说得对。已经修复了。这个解决方案使用递归,所以如果随机数中有重复的数字,函数会再次调用自身。 - JacobIRR

0

您可以这样生成所有具有唯一数字的5位整数:

tgt=set()
for i in range(1234,99999+1):
    s='{:05d}'.format(i)
    if len(set(s))==5:
        tgt.add(s)  

然后使用random.choose(tgt)随机选择一个。

(但是tdelaney的answer更好)


0
如果您是这样生成数字的:
larger_number = ''.join(random.sample(string.digits, 5))

并且像这样从用户那里获取数字:

def get_user_num(length=5):
    while True:
        num = raw_input('Enter a {}-digit number with no repeating digits: '.format(length)).zfill(length)
        if len(set(num)) < length:
            print('Please try again.')
            continue
        else:
            return num

您可以这样确定用户的数字是否在数字列表中:
set(user_number) < set(larger_number)

然后将所有这些组合成一个程序将变得非常简单。请注意,数字实际上从未被视为数字 - 它们只是字符串。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接