繁体   English   中英

IF-ELIF语句嵌套

[英]IF-ELIF statements nested

我想知道是否有更好的写作方式。 下面列出的当前代码有效。 我只是想知道是否有更好的方法。

这是为了验证。 因此if语句检查所有必填字段,如果它们是可接受的,那么它将转到执行代码。 问题开始是因为输入字段

self.text_fmax

没有被接受为整数。 所以这个特定的字段,首先检查是否为空然后忽略,如果不是,那么该值必须是0到180之间的整数。

  def call_back(self):
    if len(self.text_n.get()) == 0:
        tkMessageBox.showinfo("Mandatory Information", "Please input an integer value for Number of Tessellations Cells")
    elif len(self.text_id.get()) == 0:
        tkMessageBox.showinfo("Mandatory Information", "Please input an integer value for Tessellation Identifier")
    elif len(domain_container) == 0:
        tkMessageBox.showinfo("Mandatory Information", "Please input Domain")
    elif len(self.text_fmax.get()) != 0:
        a = int(self.text_fmax.get())
        if a < 0 or a > 180:
            tkMessageBox.showinfo("Incorrect Value", "Face Flatness should be less than 180")
        elif len(filename4) == 0:
            tkMessageBox.showinfo("Mandatory Information", "Please input Output File Name")
        else:
            self.execute_neper_code()
    elif len(filename4) == 0:
        tkMessageBox.showinfo("Mandatory Information", "Please input Output File Name")
    else:
        self.execute_neper_code()

如果您想避免重复的代码和字符串,可以尝试以下方法。 下面不是完整的代码,而是简单的例子。 键入t_msgs dict表示要验证的字段和要验证的值(可以是范围)。

def call_back(self):
    t_msgs = {"mdt": "Mandatory Information",
              "incrt_val" :"Incorrect Value"}
    checkFields = {(self.text_n, 0): 
                    (t_msgs["mdt"], 
                     "Please input an integer value for Number of Tessellations Cells"),
                   (self.text_id, 0): 
                    (t_msgs["mdt"], 
                     "Please input an integer value for Tessellation Identifier"),
                   (domain_container, 0): 
                    (t_msgs["mdt"], 
                     "Please input Domain"),
                   (self.text_fmax, range(0, 181, 180)): 
                    (t_msgs["incrt_val"], 
                     "Face Flatness should be less than 180"),
                   (len(filename4), 0): 
                    (t_msgs["mdt"], 
                     "Please input Output File Name")}

    for field in checkFields:
        if not field[1]:
            tkMessageBox.showinfo(checkFields[field][0], checkFields[field][1])
        else:
            if not (field[1][0] < field[0].get() < field[1][1]):
                tkMessageBox.showinfo(checkFields[field[0]], checkFields[field][1])

您通常不需要检查len == 0 ,只需测试对象“真实性”。

def call_back(self):
    show = tkMessageBox.showinfo
    if not self.text_n.get():
        show("Mandatory Information", "Please input an integer value for Number of Tessellations Cells")

    elif not self.text_id.get():
        show("Mandatory Information", "Please input an integer value for Tessellation Identifier")

    elif not domain_container:
        show("Mandatory Information", "Please input Domain")

    elif self.text_fmax.get() and not 0 <= int(self.text_fmax.get()) <= 180:
        show("Incorrect Value", "Face Flatness should be less than 180")

    elif not filename4:
        show("Mandatory Information", "Please input Output File Name")

    else:
        self.execute_neper_code()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM