IF-ELIF вложенные
Мне было интересно, есть ли лучший способ написать это. Текущий код, указанный ниже, работает. мне просто интересно, есть ли лучший способ.
Это для проверки. Таким образом, операторы 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()
2 ответа
Вам обычно не нужно проверять 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()
Вы можете попробовать метод ниже, если вы хотите избежать повторяющегося кода и строк. Ниже приведен не полный код, а простой пример. Ключ в 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])