回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>下面是代码:它本身可能没有多大意义,但我的问题与语法无关</p>
<p>本质上。。。有多达7个图像,它安排在预定义的布局和其他东西。。。如何使这种重复的、不可扩展的代码更加精简</p>
<pre><code>im1 = None
im2 = None
im3 = None
im4 = None
im5 = None
im6 = None
im7 = None
if com == 2:
# cv2.imshow("")
layout = int(input("Enter layout number: "))
im1 = im_1()
im2 = im_2()
while (im1 == im2):
print("Invalid")
im1 = im_1()
im2 = im_2()
elif com == 3:
# cv2.imshow("")
layout = int(input("Enter layout number: "))
im1 = im_1()
im2 = im_2()
im3 = im_3()
while (im1 == im2) | (im1 == im3) | (im2 == im3):
print("Invalid")
im1 = im_1()
im2 = im_2()
im3 = im_3()
elif com == 4:
# cv2.imshow("")
layout = int(input("Enter layout number: "))
im1 = im_1()
im2 = im_2()
im3 = im_3()
im4 = im_4()
while (im1 == im2) | (im1 == im3) | (im1 == im4) | (im2 == im3) | (im2 == im4) | (im3 == im4):
print("Invalid")
im1 = im_1()
im2 = im_2()
im3 = im_3()
im4 = im_4()
elif com == 5:
# cv2.imshow("Layouts: 5", l5)
layout = int(input("Enter layout number: "))
im1 = im_1()
im2 = im_2()
im3 = im_3()
im4 = im_4()
im5 = im_5()
while (im1 == im2) | (im1 == im3) | (im1 == im4) | (im1 == im5) | (im2 == im3) | (im2 == im4) | (im2 == im5) | (im3 == im4) | (im3 == im5) | (im4 == im5):
print("Invalid")
im1 = im_1()
im2 = im_2()
im3 = im_3()
im4 = im_4()
im5 = im_5()
elif com == 6:
# cv2.imshow("")
layout = int(input("Enter layout number: "))
im1 = im_1()
im2 = im_2()
im3 = im_3()
im4 = im_4()
im5 = im_5()
im6 = im_6()
while (im1 == im2) | (im1 == im3) | (im1 == im4) | (im1 == im5) | (im1 == im6) | (im2 == im3) | (im2 == im4) | (im2 == im5) | (im2 == im6) | (im3 == im4) | (im3 == im5) | (im3 == im6) | (im4 == im5) | (im4 == im6) | (im5 == im6):
print("Invalid")
im1 = im_1()
im2 = im_2()
im3 = im_3()
im4 = im_4()
im5 = im_5()
im6 = im_6()
elif com == 7:
# cv2.imshow("")
layout = int(input("Enter layout number: "))
im1 = im_1()
im2 = im_2()
im3 = im_3()
im4 = im_4()
im5 = im_5()
im6 = im_6()
im7 = im_7()
while (im1 == im2) | (im1 == im3) | (im1 == im4) | (im1 == im5) | (im1 == im6) | (im1 == im7) | (im2 == im3) | (im2 == im4) | (im2 == im5) | (im2 == im6) | (im2 == im7) | (im3 == im4) | (im3 == im5) | (im3 == im6) | (im3 == im7) | (im4 == im5) | (im4 == im6) | (im4 == im7) | (im5 == im6) | (im5 == im7) | (im6 == im7):
print("Invalid")
im1 = im_1()
im2 = im_2()
im3 = im_3()
im4 = im_4()
im5 = im_5()
im6 = im_6()
im7 = im_7()
</code></pre>
<p>这是一个比较图像的计算机视觉代码,但它最多只能工作7次,因为我必须事先定义图像<code>com</code>实际上是用户输入的,如果是<;7.内存仍在使用,因为定义了7个图像,并且它不允许<code>com</code>被>;7. </p>
<p>此外,如果您看到,它只工作到7,因为图像比较没有硬编码为>;7.但是<code>com</code>=n的逻辑很容易硬编码,但很费力。有没有一种方法可以使这段代码适用于n个图像/术语,其中定义了变量的确切数量,并对<code>com</code>=n的比较/布局部分进行自右对齐</p>
<p>同样,我们能否将其扩展到:</p>
<pre><code>if i != 0:
if i == 1:
anim1 = cv2.imread("anim_1.jpg")
border_b = cv2.copyMakeBorder(anim1, bt, bt, bt, bt, cv2.BORDER_CONSTANT, value = c_b)
border_w = cv2.copyMakeBorder(border_b, wt, wt, wt, wt, cv2.BORDER_CONSTANT, value = c_w)
anim1 = border_w
if i == 2:
anim2 = cv2.imread("anim_2.jpg")
border_b = cv2.copyMakeBorder(anim2, bt, bt, bt, bt, cv2.BORDER_CONSTANT, value = c_b)
border_w = cv2.copyMakeBorder(border_b, wt, wt, wt, wt, cv2.BORDER_CONSTANT, value = c_w)
anim2 = border_w
if i == 3:
anim3 = cv2.imread("anim_3.jpg")
border_b = cv2.copyMakeBorder(anim3, bt, bt, bt, bt, cv2.BORDER_CONSTANT, value = c_b)
border_w = cv2.copyMakeBorder(border_b, wt, wt, wt, wt, cv2.BORDER_CONSTANT, value = c_w)
anim3 = border_w
if i == 4:
anim4 = cv2.imread("anim_4.jpg")
border_b = cv2.copyMakeBorder(anim4, bt, bt, bt, bt, cv2.BORDER_CONSTANT, value = c_b)
border_w = cv2.copyMakeBorder(border_b, wt, wt, wt, wt, cv2.BORDER_CONSTANT, value = c_w)
anim4 = border_w
if i == 5:
anim5 = cv2.imread("anim_5.jpg")
border_b = cv2.copyMakeBorder(anim5, bt, bt, bt, bt, cv2.BORDER_CONSTANT, value = c_b)
border_w = cv2.copyMakeBorder(border_b, wt, wt, wt, wt, cv2.BORDER_CONSTANT, value = c_w)
anim5 = border_w
if i == 6:
anim6 = cv2.imread("anim_6.jpg")
border_b = cv2.copyMakeBorder(anim6, bt, bt, bt, bt, cv2.BORDER_CONSTANT, value = c_b)
border_w = cv2.copyMakeBorder(border_b, wt, wt, wt, wt, cv2.BORDER_CONSTANT, value = c_w)
anim6 = border_w
if i == 7:
anim7 = cv2.imread("anim_7.jpg")
border_b = cv2.copyMakeBorder(anim7, bt, bt, bt, bt, cv2.BORDER_CONSTANT, value = c_b)
border_w = cv2.copyMakeBorder(border_b, wt, wt, wt, wt, cv2.BORDER_CONSTANT, value = c_w)
anim7 = border_w
</code></pre>
<p>及</p>
<pre><code>if com == 2:
if im1 == 1:
im1 = anim1
im2 = anim2
elif im1 == 2:
im1 = anim2
im2 = anim1
elif com == 3:
if (im1 == 1) | (im1 == 2) | (im1 == 3):
if im1 == 1:
im1 = anim1
elif im1 == 2:
im1 = anim2
elif im1 == 3:
im1 = anim3
if (im2 == 1) | (im2 == 2) | (im2 == 3):
if im2 == 1:
im2 = anim1
elif im2 == 2:
im2 = anim2
elif im2 == 3:
im2 = anim3
if (im3 == 1) | (im3 == 2) | (im3 == 3):
if im3 == 1:
im3 = anim1
elif im3 == 2:
im3 = anim2
elif im3 == 3:
im3 = anim3
//skipped till end of 7 because too repetitive.
elif com == 7:
if (im1 == 1) | (im1 == 2) | (im1 == 3) | (im1 == 4) | (im1 == 5) | (im1 == 6) | (im1 == 7):
if im1 == 1:
im1 = anim1
elif im1 == 2:
im1 = anim2
elif im1 == 3:
im1 = anim3
elif im1 == 4:
im1 = anim4
elif im1 == 5:
im1 = anim5
elif im1 == 6:
im1 = anim6
elif im1 == 7:
im1 = anim7
if (im2 == 1) | (im2 == 2) | (im2 == 3) | (im2 == 4) | (im2 == 5) | (im2 == 6) | (im2 == 7):
if im2 == 1:
im2 = anim1
elif im2 == 2:
im2 = anim2
elif im2 == 3:
im2 = anim3
elif im2 == 4:
im2 = anim4
elif im2 == 5:
im2 = anim5
elif im2 == 6:
im2 = anim6
elif im2 == 7:
im2 = anim7
if (im3 == 1) | (im3 == 2) | (im3 == 3) | (im3 == 4) | (im3 == 5) | (im3 == 6) | (im3 == 7):
if im3 == 1:
im3 = anim1
elif im3 == 2:
im3 = anim2
elif im3 == 3:
im3 = anim3
elif im3 == 4:
im3 = anim4
elif im3 == 5:
im3 = anim5
elif im3 == 6:
im3 = anim6
elif im3 == 7:
im3 = anim7
if (im4 == 1) | (im4 == 2) | (im4 == 3) | (im4 == 4) | (im4 == 5) | (im4 == 6) | (im4 == 7):
if im4 == 1:
im4 = anim1
elif im4 == 2:
im4 = anim2
elif im4 == 3:
im4 = anim3
elif im4 == 4:
im4 = anim4
elif im4 == 5:
im4 = anim5
elif im4 == 6:
im4 = anim6
elif im4 == 7:
im4 = anim7
if (im5 == 1) | (im5 == 2) | (im5 == 3) | (im5 == 4) | (im5 == 5) | (im5 == 6) | (im5 == 7):
if im5 == 1:
im5 = anim1
elif im5 == 2:
im5 = anim2
elif im5 == 3:
im5 = anim3
elif im5 == 4:
im5 = anim4
elif im5 == 5:
im5 = anim5
elif im5 == 6:
im5 = anim6
elif im5 == 7:
im5 = anim7
if (im6 == 1) | (im6 == 2) | (im6 == 3) | (im6 == 4) | (im6 == 5) | (im6 == 6) | (im6 == 7):
if im6 == 1:
im6 = anim1
elif im6 == 2:
im6 = anim2
elif im6 == 3:
im6 = anim3
elif im6 == 4:
im6 = anim4
elif im6 == 5:
im6 = anim5
elif im6 == 6:
im6 = anim6
elif im6 == 7:
im6 = anim7
if (im7 == 1) | (im7 == 2) | (im7 == 3) | (im7 == 4) | (im7 == 5) | (im7 == 6) | (im7 == 7):
if im7 == 1:
im7 = anim1
elif im7 == 2:
im7 = anim2
elif im7 == 3:
im7 = anim3
elif im7 == 4:
im7 = anim4
elif im7 == 5:
im7 = anim5
elif im7 == 6:
im7 = anim6
elif im7 == 7:
im7 = anim7
</code></pre>
<p>tl;dr:我如何使这些不必要的重复代码更加精简</p>