Как я могу проверить, все ли размеры прямоугольника складываются, если я не знаю, какие из них введены пользователем (Python) - PullRequest
0 голосов
/ 11 апреля 2020

Название не лучшее, так как эту проблему нужно немного объяснить. Я пишу приложение, которое позволяет пользователю вводить любые размеры прямоугольника, которые они хотят (ширина, длина, площадь, периметр, длина диагонали). Это те, которые я реализую в данный момент. Теперь идея состоит в том, что из введенных свойств я хочу вернуть все возможные вещи, которые можно рассчитать по указанным данным.

Я уже написал часть, которая вычисляет данные на основе того, что они вводят, я знаю, что это, вероятно, уродливое решение, но я новичок и не мог придумать ничего лучшего:

            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, и поэтому оно не работает в уравнении.

Я чувствую, что мое неправильное кодирование новичка помогло мне и я надеюсь, что кто-то может предложить элегантное решение.

Заранее спасибо!

...