如何减少代码中if语句的数量?

问题描述

所以我的代码有很多if语句:

            rnrp += 1
        if a100 == b100:
            rnrp += 1
        if a10 == b10:
            rnrp += 1
        if a1 == b1:
            rnrp += 1

和:

            if b1000 == a100:
                rnwp += 1
                break
            if b1000 == a10:
                rnwp += 1
                break
            if b1000 == a1:
                rnwp += 1
            break
        while true:
            if b100 == a1000:
                rnwp += 1
                break
            if b100 == a10:
                rnwp += 1
                break
            if b100 == a1:
                rnwp += 1
            break
        while true:
            if b10 == a1000:
                rnwp += 1
                break
            if b10 == a100:
                rnwp += 1
                break
            if b10 == a1:
                rnwp += 1
            break
        while true:
            if b1 == a1000:
                rnwp += 1
                break
            if b1 == a100:
                rnwp += 1
                break
            if b1 == a10:
                rnwp += 1
            break 

如您所见,这是很多if语句,第一个很好,但是第二个需要改进。同样,第二个代码试图完成的是检查b的每个位置(100的位置,100的位置,10的位置等。)是否匹配a的任何位置。 如何缩小代码第二部分中if语句的数量 该帖子已由jasonharper回答(我目前无法找到该按钮,因此我只想输入它在问题中)谢谢!

解决方法

您可以使用plist之类的集合来减少操作数量。例如,

dict

可能是

    while true:
        if b100 == a1000:
            rnwp += 1
            break
        if b100 == a10:
            rnwp += 1
            break
        if b100 == a1:
            rnwp += 1
        break

由于您经常重复其中一些模式,因此您可以事先制作一些列表并重复使用它们。甚至可以使用字典来代替,这样就不必分别记住变量。

,

使用elif语句。除此之外,您可以在那里做更多的事情。使用许多if语句可能会造成混淆,但是只要您的代码是干净的,就可以将其删除。

,

我将其缩短的方式:

Boolean_value = True
while Boolean_value:
    if b100 == a1000: rnwp,Boolean_value = rnwp + 1,False 
    if b100 == a10: rnwp,False 
    if b100 == a1: rnwp,False 

如果要使用if语句,而if语句仅具有一个表达式,这将非常有用。 您也可以在一行中更改多个值。

,

您可以使用 itertools 中的 product 并在一行中完成所有操作:

from itertools import product 

rnwp += sum(b==a for b,a in product([b1000,b100,b10,b1],[a1000,a100,a10,a1]))