You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按百分比动态调整随机选择1和2的概率?附代码求助

实现动态调整1和2的选中概率

要实现选中后提升对应数字概率的需求,不能再用random.randint()(它只能等概率选取),得改用权重驱动的随机选择,每次选中目标后更新其权重,以此提升后续选中的概率。以下是修改后的完整代码:

import pygame, random, sys

pygame.init()
SCREEN_WIDTH = 500
SCREEN_HEIGHT = 500
BLACK = (0, 0, 0)
WHITE = "#FFFFFF"
win = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("Test")

# 初始化权重,初始时1和2的选中概率相等
weights = [1, 1]

def test2():
    win.fill(BLACK)
    
    # 根据当前权重随机选择数字
    selected = random.choices([1, 2], weights=weights, k=1)[0]
    
    # 更新权重:选中1则提升10%权重,选中2则提升15%
    if selected == 1:
        weights[0] *= 1.1
    else:
        weights[1] *= 1.15
    
    # 渲染选中的数字
    text_font = pygame.font.Font('freesansbold.ttf', 100)
    screws_text = text_font.render(str(selected), True, WHITE)
    textRect = screws_text.get_rect()
    textRect.center = (250, 250)
    win.blit(screws_text, textRect)
    
    pygame.display.update()

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE:
                test2()

关键改动说明:

  • 权重初始化:用weights列表存储1和2的相对权重,初始值[1,1]代表两者初始选中概率相同。
  • 权重式选择:用random.choices()替代randint,该函数可以根据传入的weights参数按相对概率选取元素,k=1表示只选一个结果。
  • 权重更新逻辑:每次选中后,对应数字的权重乘以1.1(1的概率提升10%)或1.15(2的概率提升15%),这样后续选中该数字的概率会越来越高。
  • 事件处理优化:移除了test2()函数内的事件循环,避免主循环和子函数的事件处理冲突,确保关闭窗口等操作正常响应。

内容的提问来源于stack exchange,提问作者AraAraSayonnara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 08:15:48