不接受 if 语句而是去 else
doesn't pick up the if statements instead went to else
这就是我现在拥有的,if 语句感觉没有参与代码。我也试过 random.randint() 但没用
async def open_huge_cat_case(ctx):
huge_case = randint(1, 100)
if huge_case == (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40):
await ctx.send('1')
if huge_case == (41, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65):
await ctx.send('2')
if huge_case == (66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85):
await ctx.send('3')
if huge_case == (86, 87, 88, 89, 90, 91, 92, 93, 94, 95):
await ctx.send('4')
else:
await ctx.send('5')
您不能使用 ==
来比较事物的列表(或元组),相反您需要 in
像这样:
async def open_huge_cat_case(ctx):
huge_case = randint(1, 100)
if huge_case in (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40):
await ctx.send('1')
elif huge_case in (41, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65):
await ctx.send('2')
elif huge_case in (66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85):
await ctx.send('3')
elif huge_case in (86, 87, 88, 89, 90, 91, 92, 93, 94, 95):
await ctx.send('4')
else:
await ctx.send('5')
您还需要 elif
如上所示,以确保一次只执行一个。
像这样使用range()
也会更好:
huge_case = randint(1, 100)
if huge_case in range(1, 41):
await ctx.send('1')
elif huge_case in range(41, 66)):
await ctx.send('2')
elif huge_case in range(66, 86):
await ctx.send('3')
elif huge_case in range(86, 96):
await ctx.send('4')
else:
await ctx.send('5')
这样写起来更清晰、更容易。
您似乎想在“1”和“5”之间随机选择一个字符串,但权重不同。
您可以直接使用 random.choices
:
random.choices('12345', [40, 25, 20, 10, 5])[0]
它返回 '1'
的概率是 '5'
的 8 倍。 random.choices
returns 默认情况下是一个列表,但看起来您只对一个值感兴趣,因此 [0]
.
使用 cum_weights
可能比 weights
稍微快一点:
random.choices('12345', cum_weights=[40, 65, 85, 95, 100])[0]
如果您想一次获得多个结果:
random.choices('12345', cum_weights=[40, 65, 85, 95, 100], k=30)
#=> ['3', '1', '3', '1', '3', '5', '2', '2', '5', '4', '3', '3', '2', '3', '2', '1', '1', '1', '1', '3', '3', '2', '5', '2', '2', '1', '3', '1', '1', '3']
这就是我现在拥有的,if 语句感觉没有参与代码。我也试过 random.randint() 但没用
async def open_huge_cat_case(ctx):
huge_case = randint(1, 100)
if huge_case == (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40):
await ctx.send('1')
if huge_case == (41, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65):
await ctx.send('2')
if huge_case == (66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85):
await ctx.send('3')
if huge_case == (86, 87, 88, 89, 90, 91, 92, 93, 94, 95):
await ctx.send('4')
else:
await ctx.send('5')
您不能使用 ==
来比较事物的列表(或元组),相反您需要 in
像这样:
async def open_huge_cat_case(ctx):
huge_case = randint(1, 100)
if huge_case in (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40):
await ctx.send('1')
elif huge_case in (41, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65):
await ctx.send('2')
elif huge_case in (66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85):
await ctx.send('3')
elif huge_case in (86, 87, 88, 89, 90, 91, 92, 93, 94, 95):
await ctx.send('4')
else:
await ctx.send('5')
您还需要 elif
如上所示,以确保一次只执行一个。
像这样使用range()
也会更好:
huge_case = randint(1, 100)
if huge_case in range(1, 41):
await ctx.send('1')
elif huge_case in range(41, 66)):
await ctx.send('2')
elif huge_case in range(66, 86):
await ctx.send('3')
elif huge_case in range(86, 96):
await ctx.send('4')
else:
await ctx.send('5')
这样写起来更清晰、更容易。
您似乎想在“1”和“5”之间随机选择一个字符串,但权重不同。
您可以直接使用 random.choices
:
random.choices('12345', [40, 25, 20, 10, 5])[0]
它返回 '1'
的概率是 '5'
的 8 倍。 random.choices
returns 默认情况下是一个列表,但看起来您只对一个值感兴趣,因此 [0]
.
使用 cum_weights
可能比 weights
稍微快一点:
random.choices('12345', cum_weights=[40, 65, 85, 95, 100])[0]
如果您想一次获得多个结果:
random.choices('12345', cum_weights=[40, 65, 85, 95, 100], k=30)
#=> ['3', '1', '3', '1', '3', '5', '2', '2', '5', '4', '3', '3', '2', '3', '2', '1', '1', '1', '1', '3', '3', '2', '5', '2', '2', '1', '3', '1', '1', '3']