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
相关产品推荐
相关产品推荐

