python - Python 3:如何获得一个随机的 4 位数字?
问题描述
我需要帮助才能获得一个随机的 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
可能比多个集合操作快一个数量级,等等。
推荐阅读
- java - 如何在android studio中获取AsyncTask的返回值
- azure-ad-b2c - ClaimTransformation 更新整数值
- python - 如何使该方法针对odoo上的特定记录运行一次?
- python - 在 django 视图中迭代
- flutter - 颤振位置导入错误
- javascript - 努力删除 MapboxCircle
- go - 如何在golang中获取项目中的Packages数量
- javascript - 自定义 react-native 的默认启动画面
- azure-active-directory - 当帐户是另一个目录的来宾时,通过 AAD MFA 使用 SSMS 连接到 Azure SQL 数据库
- r - ggplot2中半圆的文本太密集