Python 在 for 循环中跳过我的 if 和 else 语句,但是 for 循环是 运行

Python skipping my if and else statement in a for loop, but the for loop is running

好吧,我还在学习,我现在正在学习 pyqt5 设计器,但我对 for 和 if 语句有疑问,其中 python 不做其他任何事情,或者如果,我使用 print (empleados[i] ["Nombre"]), 检查 else 是否为 运行ning 但 if 的 none 或 else 运行

        for i in range(0,len(empleados)):
            print(empleados[i]["Numero"])
            if self.ui.num.text() == empleados[i]["Numero"]:
                QtWidgets.QMessageBox.information(self,"Advertencia","No se pueden registrar dos numeros de empleado iguales")    
            else:
                
                empleados.append({"Nombre":self.ui.nom.text(),
                                  "Numero":self.ui.num.text(),
                                  "Salario":self.ui.salario.text(),
                                  "Dep":self.ui.dep.currentText(),
                                  "FechaC":self.ui.dateC.date(),
                                  "FechaN":self.ui.dateN.date()})
                print (empleados[i]["Nombre"])
                break

当且仅当没有任何匹配的 Numero 时,是否打算将新元素附加到 empleados?如果是这样,我认为这可以解决问题:

if any(e["Numero"] == self.ui.num.text() for e in empleados):
    QtWidgets.QMessageBox.information(
        self,
        "Advertencia",
        "No se pueden registrar dos numeros de empleado iguales"
    )
else:
    empleados.append({
        "Nombre":self.ui.nom.text(),
        "Numero":self.ui.num.text(),
        "Salario":self.ui.salario.text(),
        "Dep":self.ui.dep.currentText(),
        "FechaC":self.ui.dateC.date(),
        "FechaN":self.ui.dateN.date()
    })

一般来说,在遍历列表时修改列表效果不佳,但在这种情况下,我认为无论如何你都不想在循环内进行追加,因为你只想追加一个元素。

如果 Numero 是唯一的,您可以考虑制作 empleados 以该字段为关键字的字典,例如:

emp_by_num = {e["Numero"]: e for e in empleados}

这样您就可以使用 in 进行快速检查,而不必使用 any:

if self.ui.num.text() in emp_by_num: