Название не лучшее, так как эту проблему нужно немного объяснить. Я пишу приложение, которое позволяет пользователю вводить любые размеры прямоугольника, которые они хотят (ширина, длина, площадь, периметр, длина диагонали). Это те, которые я реализую в данный момент. Теперь идея состоит в том, что из введенных свойств я хочу вернуть все возможные вещи, которые можно рассчитать по указанным данным.
Я уже написал часть, которая вычисляет данные на основе того, что они вводят, я знаю, что это, вероятно, уродливое решение, но я новичок и не мог придумать ничего лучшего:
if a != 0 and b != 0:
locals = a*b
ristcalculations.append("S="+str(round(locals, self.rounder)))
localp = 2*(a+b)
ristcalculations.append("P=" + str(round(localp, self.rounder)))
locald = math.sqrt(a**2+b**2)
ristcalculations.append("d=" + str(round(locald, self.rounder)))
ristcalculations.append("a=" + str(round(a, self.rounder)))
ristcalculations.append("b=" + str(round(b, self.rounder)))
locala = a
localb= b
, и есть выражение "elif" из всех 10 возможных параметров свойства a (длина) , b (ширина), P (периметр), S (площадь) и d (диагональ).
Я сделал это так, потому что я обнаружил, что из любой пары 2 переменных можно вычислить остальные 3.
Я также реализовал оператор try, который выдает всплывающее сообщение об ошибке, когда один из этих операторов if возвращает ValueError, что означает вводимые пользователем данные, что невозможно в случае прямоугольника.
Проблема у меня заключается в том, что когда пользователь вставляет, например, a, b и область, а область не складывается со сторонами прямоугольника, из-за того, как он вычисляет все, что основано на первой паре данных, которые у него есть (в данном случае это пара a и b, потому что это первый оператор if), моя программа игнорирует ошибочную переменную S (area).
Теперь я попытался подумать о способах ее решения, и лучший из предложенных мною способов - написать функцию, которая проверяет, является ли уравнение, содержащее все эти переменные, истинным или нет, и выдает сообщение об ошибке, если это не так.
Проблема с этим ограничением состоит в том, что я в настоящее время храню переменные в списке с именем dataBackend = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] (который также используется для другие геометрические формы c, отсюда и несколько лишних нулей) и вставка каждой переменной в определенную c позицию. Когда я вызываю функцию, которая вычисляет размеры прямоугольника, я делаю это следующим образом: вычисление прямоугольника (dataBackend [0], dataBackend [1] .. и т. Д.
Решение, которое я придумала, не работает потому что, когда пользователь не ввел никаких данных для одной из переменных, ему присваивается значение 0, и поэтому оно не работает в уравнении.
Я чувствую, что мое неправильное кодирование новичка помогло мне и я надеюсь, что кто-то может предложить элегантное решение.
Заранее спасибо!