首页 > 解决方案 > Python 3:如何获得一个随机的 4 位数字?

问题描述

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

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

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

标签: pythonpython-3.x

解决方案


如果您想扩展您的解决方案以确保前导数字不是 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可能比多个集合操作快一个数量级,等等。


推荐阅读