根据变量浮点数分配十六进制值

Assigning HEX value based on a variable float

简而言之

我很困惑,我正在尝试根据整数值分配十六进制颜色,基本上是这样的:

_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 制作一个不和谐的机器人(命令 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 值分配十六进制颜色,这样我就可以将其用作不和谐中的嵌入颜色(如: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

我根据这个配色方案做了那个table:

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

到目前为止我做了什么:

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

我的问题:

我逻辑有问题吗?我在这里做错了什么?总觉得有什么看不到的地方..

你在所有条件下都弄错了小于号。

你不想要 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 时,即 false.
  • _total_wn8 <= 599_total_wn8 = 400400 <= 500 时,即 true.
  • false and truefalse.

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