python - 生成重复数字的宾果卡
问题描述
n
我创建了一个简单的 Bingo 卡片生成器,它可以在和之间生成 4 个数字n+15
。然而,我注意到数字有时会生成两次,尽管if
我写了一个应该找到重复项并重新运行该单元格的随机生成的语句。我的代码如下:
import random
ballCount = 75 # Max value of cell
gridWidth = 4
gridHeight = 5
numPerCard = 20 # Numbers generated per card
minimum = 1
maximum = 15
def generate_number(stored, small_num, big_num):
random.seed(a=None, version=2)
random_number = str(random.randint(small_num, big_num))
if "| "+random_number+" |" in stored:
generate_number(stored, small_num, big_num)
return random_number
for row in range(gridHeight):
string = ""
for Number in range(gridWidth):
number = generate_number(string, minimum, maximum)
string += " | " + number
string += " |"
print(string)
maximum += 15
minimum += 15
这是一个带有重复输出的示例(23 出现 2 次):
| 2 | 5 | 9 | 12 |
| 25 | 23 | 19 | 23 |
| 37 | 42 | 30 | 37 |
| 60 | 49 | 50 | 55 |
| 73 | 71 | 69 | 67 |
解决方案
if "| "+random_number+" |" in stored:
generate_number(stored, small_num, big_num)
return random_number
如果您已经拥有该号码,则generate_number
再次拨打电话,但您仍会返回原始号码(副本)。
您可能有兴趣random.sample
作为在某个范围内随机选择唯一数字的替代方法。例如:
>>> [random.sample(range(n, n+15), 4) for n in range(15, 75, 15)]
[[20, 26, 15, 23], [37, 44, 32, 40], [48, 45, 47, 50], [63, 62, 68, 71]]
或者,漂亮的印刷:
>>> for row in [random.sample(range(n, n+15), 4) for n in range(15, 75, 15)]:
... print(f"| {' | '.join(map(str, row))} |")
...
| 17 | 15 | 27 | 22 |
| 34 | 33 | 42 | 36 |
| 54 | 51 | 55 | 48 |
| 68 | 73 | 61 | 72 |
推荐阅读
- junit - SONAR 代码覆盖率未反映在私有方法中
- recaptcha-enterprise - Google Enterprise Recaptcha 对未记录请求的基本指标进行评分
- tensorflow - 从 1.x 迁移到 TensorFlow 2.x 会导致 Google AI 平台上的训练和 ResourceExhaustedErrors 慢得多
- postgresql - PostgreSQL如何安全地删除pg_wal目录中的文件
- jms - 从 APIGEE 代理端点调用 AMQ 侦听器
- python - search and extract data from string base on string value
- typescript - 如何使用新的 elasticsearch typescript 类型
- php - Wordpress comments.PHP 在隐身模式下显示缓存版本,但登录管理员的新版本
- php - DataTables + PHP/AJAX - 在显示之前操作结果
- python - 当我尝试发送消息时,RabbitMQ 崩溃