避免冗余

Avoid redundancy

这是我的部分代码。

if deplacement_result == "ok":
    if self.current_player_color == "white":
        self.current_player_color = "black"
    else:
        self.current_player_color = "white"

elif deplacement_result == "taking":
    if self.damier.can_take_the_piece(target_position):
        self.forced_source_position = target_position
    else:
        self.forced_source_position = None
        self.have_to_take = False

        if self.current_player_color == "white":
            self.current_player_color = "black"
        else:
            self.current_player_color = "white"

我注意到我有两倍的代码

if self.current_player_color == "white":
    self.current_player_color = "black"
else:
    self.current_player_color = "white"

如何避免重蹈覆辙

如果你想摆脱冗余,你可以尝试使用这个:

if resultat_deplacement == "ok" or resultat_deplacement == "prise":
    # This code is executed in either case
    if self.couleur_joueur_courant == "blanc":
        self.couleur_joueur_courant = "noir"
    else:
        self.couleur_joueur_courant = "blanc"

    if resultat_deplacement == "prise":  # Only executes for the if this is True
        if self.damier.piece_peut_faire_une_prise(position_cible):
            self.position_source_forcee = position_cible
        else:
            self.position_source_forcee = None
            self.doit_prendre = False

但是正如@chessguy 所指出的,这会重复 if 语句两次。

您可以尝试像这样定义一个函数(并根据需要转换为法语):


def setColour():
    if self.couleur_joueur_courant == "blanc":
        self.couleur_joueur_courant = "noir"
    else:
        self.couleur_joueur_courant = "blanc"

if resultat_deplacement == "ok":
    setColour()

if resultat_deplacement == "prise":  # Only executes for the if this is True
    setColour()
    if self.damier.piece_peut_faire_une_prise(position_cible):
        self.position_source_forcee = position_cible
    else:
        self.position_source_forcee = None
        self.doit_prendre = False

在您的代码中,您不需要 else 部分,因为它会重新初始化为相同的字符串。只有以下代码就足够了:

if self.current_player_color == "white":
    self.current_player_color = "black"

代替这个:

if self.current_player_color == "white":
    self.current_player_color = "black"
else:
    self.current_player_color = "white"

或者,您可以使用一个衬垫:

self.couleur_joueur_courant = "noir" if self.couleur_joueur_courant == "blanc"

您可以将其缩减为一行。

self.couleur_joueur_courant = "noir" if self.couleur_joueur_courant == "blanc" else "blanc"

为了避免每个问题的代码重复,
您可以使用标志变量。

switch_color = False
if deplacement_result == "ok":
    switch_color = True

elif deplacement_result == "taking":
    if self.damier.can_take_the_piece(target_position):
        self.forced_source_position = target_position
    else:
        self.forced_source_position = None
        self.have_to_take = False
        switch_color = True

if switch_color:
    if self.current_player_color == "white":
        self.current_player_color = "black"
    else:
        self.current_player_color = "white"
    switch_color = False