如何按百分比动态调整随机选择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
相关产品推荐
相关产品推荐

