避免冗余
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
这是我的部分代码。
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