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

Discord.py开发老虎机机器人如何统计循环中重复表情并计算对应奖励

错误原因

你遇到的类型错误是因为循环变量i是range(3)生成的整数(取值0、1、2),而字符串count()方法要求传入字符串类型的匹配内容,直接传int类型自然触发类型报错。另外你原有逻辑没有区分2个匹配和3个匹配的场景,也无法实现3个全中奖励翻3倍的需求。

最优修复方案

不要直接把摇出的表情拼接成字符串再统计,先把3次摇出的结果存在列表里,统计重复次数的逻辑会简单很多。推荐用Python内置的collections.Counter做频次统计,几行代码就能搞定分档发奖的需求。

修改后的完整代码如下:

import random
import discord
from collections import Counter

final = [
    "||:watermelon:||", #0
    "||:lemon:||", #1
    "||:tangerine:||", #2
    "||:apple:||", #3
    "||:pineapple:||", #4
]

# 先存储三次摇出的表情结果
rolled_emojis = []
for _ in range(3):
    rolled_emojis.append(random.choices(final, cum_weights=(0.4, 0.4, 0.2, 0.2, 0.2), k=1)[0])

# 拼接展示用的描述文本
description_text = " ".join(rolled_emojis)

embed = discord.Embed(title="Slot Machine", description=description_text, color=0x00d9ff)
embed.set_footer(text="Use !lottery to see how Prizes work!")
await ctx.send(embed=embed)

# 统计每个表情的出现频次
emoji_counts = Counter(rolled_emojis)
max_repeat = max(emoji_counts.values())

if max_repeat == 3:
    # 三个完全匹配,翻3倍
    await update_bank(ctx.author, 3 * amount)
    await ctx.send(f'🎉 头奖!三倍奖励已到账 {ctx.author.mention}')
elif max_repeat == 2:
    # 两个匹配,发2倍奖励
    await update_bank(ctx.author, 2 * amount)
    await ctx.send(f'😊 中奖啦!两倍奖励已到账 {ctx.author.mention}')
else:
    # 无匹配,扣除本金
    await update_bank(ctx.author, -1 * amount)
    await ctx.send(f'😢 很遗憾未中奖,下次试试手气吧 {ctx.author.mention}')
可选无依赖方案

如果你不想额外导入Counter,也可以直接用列表的count方法手动统计,逻辑完全一致:

max_repeat = max(rolled_emojis.count(emoji) for emoji in rolled_emojis)

用这一行替换掉Counter相关的两行代码即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 18:15:01