繁体   English   中英

"Python 3:如何获得一个随机的 4 位数字?"

[英]Python 3: How to get a random 4 digit number?

我需要帮助才能获得一个随机的 4 位长号码,号码中没有重复的数字,所以我有

import random
numbers = random.sample(range(10), 4)

这是最好的方法吗? 我还需要帮助确保第一个数字不是 0,我该怎么做? 为输入喝彩

如果您想扩展您的解决方案以确保前导数字不是 0,那么可能没有超级简洁的方法来编写它; 明确一点:

first = random.choice(range(1, 10))
leftover = set(range(10)) - {first}
rest = random.sample(leftover, 3)
digits = [first] + rest

请注意,我正在利用sample采用序列或集合这一事实。 在旧版本的 Python 中,它需要一个序列。 根据2.7 文档,这包括 2.7,但 CPython 和 PyPy 2.7 无论如何都需要一组。 无论如何,如果这是一个问题,你可以做leftover = [val for val in range(10) if val != first]


如果性能很重要,还要考虑一件事。 noskio 的答案这样的非确定性解决方案显然具有无限的最坏情况时间,但在几乎每种情况下它都可能明显更快。 您有 90% 的机会在第一次得到答案,在前十个循环中有 99.9999999% 的机会,而且至少有可能单次调用sample可能比多个 set 操作快一个数量级,等等.

如果您允许第一个数字为零(例如 0123 而不是 123),那么您需要将结果设为字符串。 为此,我建议random.sample(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'], 4)<\/code> 。 或者, random.sample([str(x) for x in range(10)], 4)<\/code> 。

否则,阿巴纳特的答案有效。

以下代码完成了这项工作:

import random

a = random.sample(range(10),3)
number = int(str(random.randint(1,9)) + str(a[0]) + str(a[1]) + str(a[2]))

您可以使用以下代码:

mylist = ['1','2','3','4','5','6','7','8','9']
x1 = int(random.choice(mylist))
x2 = int(random.choice(mylist))
x3 = int(random.choice(mylist))
x4 = int(random.choice(mylist))
x = x1 * 1000 + x2 * 100 + x3 * 10 + x4
print(x)

random.sample()确保没有重复的数字,但第一个数字可以为零,因此在这种情况下可以重新随机化

while True:
    number = ''.join(str(x) for x in random.sample(range(10), 4))
    if not number.startswith('0'):
        break

使用来自itertoolspermutations

from random import choice
from itertools import permutations

while True:
    v = choice(list(permutations('0123456789', 4)))
    if v[0] != '0':
        break
print(''.join(v))

样本输出:

3597

编辑: permutations ,没有product

您应该首先在 python IDE 上导入随机库。

import random
a = random.randint(1000,9999)
print(a)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM