有没有更好的方式编写这些if语句

PyS*_*w45 2 python opencv python-3.x

本质上,当对象经过时,这些if语句会迅速更改cv2线的颜色,问题是有4行,我想在颜色变为绿色之前和之后保持红色。

这不仅看起来很糟糕,而且可能没有效果

if counter is 1:
    cv2.line(input_frame, (line_pos1, 0), (line_pos1, height), line_col_green, line_size)
    cv2.line(input_frame, (line_pos2, 0), (line_pos2, height), line_col_red, line_size)
    cv2.line(input_frame, (0, line_pos4), (width, line_pos4), line_col_red, line_size)
    cv2.line(input_frame, (0, line_pos5), (width, line_pos5), line_col_red, line_size)
    lct1 += 1
if counter is 2:
    cv2.line(input_frame, (line_pos1, 0), (line_pos1, height), line_col_red, line_size)
    cv2.line(input_frame, (line_pos2, 0), (line_pos2, height), line_col_green, line_size)
    cv2.line(input_frame, (0, line_pos4), (width, line_pos4), line_col_red, line_size)
    cv2.line(input_frame, (0, line_pos5), (width, line_pos5), line_col_red, line_size)
    lct2 += 1
if counter is 3:
    cv2.line(input_frame, (line_pos1, 0), (line_pos1, height), line_col_red, line_size)
    cv2.line(input_frame, (line_pos2, 0), (line_pos2, height), line_col_red, line_size)
    cv2.line(input_frame, (0, line_pos4), (width, line_pos4), line_col_green, line_size)
    cv2.line(input_frame, (0, line_pos5), (width, line_pos5), line_col_red, line_size)
    lct3 += 1
if counter is 4:
    cv2.line(input_frame, (line_pos1, 0), (line_pos1, height), line_col_red, line_size)
    cv2.line(input_frame, (line_pos2, 0), (line_pos2, height), line_col_red, line_size)
    cv2.line(input_frame, (0, line_pos4), (width, line_pos4), line_col_red, line_size)
    cv2.line(input_frame, (0, line_pos5), (width, line_pos5), line_col_green, line_size)
    lct4 += 1
if counter is 0:
    cv2.line(input_frame, (line_pos1, 0), (line_pos1, height), line_col_red, line_size)
    cv2.line(input_frame, (line_pos2, 0), (line_pos2, height), line_col_red, line_size)
    cv2.line(input_frame, (0, line_pos4), (width, line_pos4), line_col_red, line_size)
    cv2.line(input_frame, (0, line_pos5), (width, line_pos5), line_col_red, line_size)
Run Code Online (Sandbox Code Playgroud)

Par*_*ngh 7

扩展我的评论。这是一些可以快速说明如何使用功能的说明。这可能不是唯一的方法,并且可能会有更好的方法,但是您可以从这样的方法开始。

def set_line_colour(counter):
    line_colours = [line_col_red] * 4 #makes a list of 4 "Reds"
    if counter != 0: #or more simply, if counter: (because 0 is "falsey")
        line_colours[counter - 1] = line_col_green #sets one of the "Reds" to green instead.
    cv2.line(input_frame, (line_pos1, 0), (line_pos1, height), line_colours[0], line_size)
    cv2.line(input_frame, (line_pos2, 0), (line_pos2, height), line_colours[1], line_size)
    cv2.line(input_frame, (0, line_pos4), (width, line_pos4), line_colours[2], line_size)
    cv2.line(input_frame, (0, line_pos5), (width, line_pos5), line_colours[3], line_size)
Run Code Online (Sandbox Code Playgroud)

可能有帮助的一般经验法则:如果发现自己在编写代码时复制粘贴行,请停下来想一想是否可以将其转换为函数。

另外,旁注:==用于与ints进行比较,而不用于is


免责声明:此代码未经测试,使用前请验证并进行必要的更改。