python - IF-ELIF 语句嵌套

标签 python python-2.7 tkinter tkmessagebox

我想知道是否有更好的写法。下面所述的当前代码有效。我只是想知道是否有更好的方法。

这是为了验证。因此,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 字典中的键表示要验证的字段和要验证的值(可以是范围)。

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])

关于python - IF-ELIF 语句嵌套,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35786068/

相关文章:

android - 意外的 pyssl 证书错误

Python raw_input 使用 TAB 而不是 ENTER?

python - 如何搜索 yaml 文件中的特定字符串和内容

python - 导入 .gif 的最简单代码

jquery - 使用 django 生成文件以使用 javascript/jQuery 下载

python - 如何保持我的 python-daemon 进程运行或在失败时重新启动它?

python - 如何在继承 wx.Frame 的类之外的类中创建 staticBitmap

python - 如何更改 tk.Menu 对象的颜色?

linux - SSL 和 Tkinter 不存在于 Python 3.5.2、Debian Linux 的源代码构建中

python - 将经过训练的 xgboost 分类器从 AWS s3 上传到 EMR