Python按概率随机触发按键时点赞分支计数不减值问题排查
问题根因
你代码里的多个逻辑错误共同导致计数不生效、代码运行异常,核心问题如下:
- 循环条件写反:初始
amount_like = 20,循环判断写的while amount_like<=0,初始值完全不满足进入循环的条件,循环体根本不会执行 - 随机函数用法完全错误:
random.choices()返回值是列表类型,Python3不支持列表和整数直接比大小,你写的random.choices(['a','b','a','a']) <= 0运行时会直接抛出TypeError,根本进不到内层的点赞逻辑分支;另外你写的候选集['a','b','a','a']对应概率是a占75%、b占25%,不符合你要求的82.5%/17.5%的概率规则,也没有传入权重参数 - 按键触发时机错误:你在循环外就定义了
a = keyboard.send("LEFT")、b = keyboard.send("RIGHT"),代码刚启动就会直接触发左右键操作,不是等随机选中对应分支后才执行;且这两个变量存的是按键函数的返回值(通常为None),不是可执行的操作本身 - 分支逻辑混乱:点踩分支里误写为发送左键
keyboard.send("LEFT");elif amount_like() <=0:把整数变量amount_like当函数调用,会直接抛类型错误;随机选择的结果没有和后续操作分支绑定,随机逻辑完全失效
修正后可运行代码
import random from time import sleep # 提前导入你用到的keyboard模块、likes/dislikes业务判断函数 amount_like = 20 # 剩余待点赞数大于0时持续执行循环 while amount_like > 0: # 按指定权重随机选择操作,82.5%概率选点赞、17.5%概率选点踩 selected_op = random.choices( population=['a', 'b'], weights=[82.5, 17.5], k=1 )[0] # 取返回列表的第一个元素,即为本次选中的操作 op_success = False if selected_op == 'a': # 选中点赞分支才发送左键 keyboard.send("LEFT") if likes(): amount_like -= 1 print('Лайк сделан...') op_success = True sleep(1) elif selected_op == 'b': # 选中点踩分支才发送右键 keyboard.send("RIGHT") if dislikes(): print('Дизлайк отправлен...') op_success = True sleep(1) # 两个操作都没执行成功则触发跳过逻辑 if not op_success: print('Матч скипнут...') sleep(1) print('Успех') print('Цикл окончен, лайков осталось =', amount_like)
关键修正说明
- 调整循环判断条件为
amount_like > 0,初始值20时可正常进入循环,每成功完成一次点赞计数减1,计数归0时自动退出循环 - 修正随机函数用法:显式传入
weights参数匹配要求的概率,取出随机选择的结果值再做分支判断,避免类型错误 - 把按键发送逻辑移到对应分支内部,只有随机选中对应操作时才触发按键,修正点踩分支的按键为
RIGHT - 新增操作成功标记,点赞、点踩都未执行成功时自动触发跳过逻辑
- 移除把整数当函数调用的错误写法,
amount_like -= 1仅在点赞操作实际执行成功时触发,保证计数准确
内容的提问来源于stack exchange,提问作者Iexeez
相关产品推荐
相关产品推荐

