基于可变浮点值分配十六进制值

2024-04-29 02:44:04 发布

您现在位置:Python中文网/ 问答频道 /正文

总之

我很困惑,我试图根据整数值分配十六进制颜色,基本上如下所示:

_total_wn8 = int(input("WN8 value: "))

if 0 > _total_wn8 <= 300:
    color = "000" # Black
    print(f"Colour = {color} (black)")
elif 300 > _total_wn8 <= 599:
    color = "cd3333" # Red
    print(f"Colour = {color} (red)")
elif 599 > _total_wn8 <= 899:
    color = "d77900" # Orange
    print(f"Colour = {color} (orange)")
elif 899 > _total_wn8 <= 1249:
    color = "d7b600" # Yellow
    print(f"Colour = {color} (yellow)")
elif 1249 > _total_wn8 <= 1599:
    color = "6d9521" # Light green
    print(f"Colour = {color} (light green)")
elif 1599 > _total_wn8 <= 1899:
    color = "4c762e" # Dark green
    print(f"Colour = {color} (dark green)")
elif 1899 > _total_wn8 <= 2349:
    color = "4a92b7" # Blue
    print(f"Colour = {color} (blue)")
elif 2349 > _total_wn8 <= 2899:
    color = "83579d" # Light purple
    print(f"Colour = {color} (light purple)")
else:
    color = "5a3175" # Dark purple
    print(f"Colour = {color} (dark purple)")

# Gives this in console:
WN8 value: 972
Colour = 6d9521 (light green)

但是972在899和1249之间,所以我希望它是黄色的 我做错了什么

说明:

我正在用python制作一个discord bot(命令here的完整代码),我使用BeautifulSoup(默认情况下是字符串)从网站获得一些值:

_total_wn8 = int(td1[0].text.replace(',', '')) / 100 # Removing comma so I can convert to int, then dividing by 100 again
_24h_wn8 = int(td1[1].text.replace(',', '')) / 100
_30d_wn8 = int(td1[3].text.replace(',', '')) / 100

# Printing gives this for example:
971.91
2552.21
953.87

我有这个代码根据_total_wn8值分配一个十六进制颜色,这样我就可以使用它作为discord中的嵌入颜色(如:color=int(color, 16)):

if 0 > _total_wn8 <= 300:
    color = "000" # Black
elif 300 > _total_wn8 <= 599:
    color = "cd3333" # Red
elif 599 > _total_wn8 <= 899:
    color = "d77900" # Orange
elif 899 > _total_wn8 <= 1249:
    color = "d7b600" # Yellow
elif 1249 > _total_wn8 <= 1599:
    color = "6d9521" # Light green
elif 1599 > _total_wn8 <= 1899:
    color = "4c762e" # Dark green
elif 1899 > _total_wn8 <= 2349:
    color = "4a92b7" # Blue
elif 2349 > _total_wn8 <= 2899:
    color = "83579d" # Light purple
else:
    color = "5a3175" # Dark purple

我根据这个配色方案表制作了:

Colour scheme

然而,我感到困惑,因为当_total_wn8为972时,我希望颜色为黄色,但嵌入颜色为浅绿色,或者如果_total_wn8为2219,则颜色为浅紫色,而我希望颜色为蓝色。但有时,它确实工作正常,例如当_wn8_total低于300时,颜色正确为黑色

到目前为止我所做的:

  1. 我重新检查了每个十六进制颜色值,它们是正确的
  2. 我在分配颜色变量后立即打印了它,这 是指定的颜色,但不是正确的颜色
  3. 我重新检查了我的逻辑,我个人没有发现任何问题
  4. 在另一个python文件中尝试它,使用this代码 给出相同的结果

我的问题:

我的逻辑错了吗?我做错了什么?我觉得有些东西我没有看到


Tags: 代码颜色greenthiscolorinttotallight
1条回答
网友
1楼 · 发布于 2024-04-29 02:44:04

在所有条件下,您的小于符号错误

您不需要300 > _total_wn8 <= 599,但是300 < _total_wn8 <= 599。注意,第一个比较符号应该是<,而不是>

解释
在Python中,链式比较扩展为一系列简单的比较,它们之间有and,正如您在其他语言中看到的那样,例如300 > _total_wn8 <= 599变成了300 > _total_wn8 and _total_wn8 <= 599

如果你仔细看这个,你会发现它并没有达到你想要的效果。例如,您期望400使300 > _total_wn8 <= 599为真,但它没有:

  • 300 > _total_wn8_total_wn8 = 400300 > 400时,这是
  • _total_wn8 <= 599_total_wn8 = 400400 <= 500时,这是真的
  • false and true

所以,你有错误的条件是第一个,300 > _total_wn8。您必须在所有if语句中修复此问题

相关问题 更多 >