def left(q):
return q[0]
def op(q):
return q[1]
def right(q):
return q[2]
def isInside(v, q):
if isinstance(q, list):
return isInside(v, (left(q))) or isInside(v, (right(q)))
else:
return v == q
def solve(v, q):
if isInside(v, left(q)):
q3 = solving(v, q)
print "**" # debug line
print q3 # debug line. this prints "None" to the terminal."
return q3
else:
raise RuntimeException, "The variable does not exist in the expression."
def solving(v, q):
print q # debug line
if v == left(q):
print "*" # debug line
print q # debug line. prints the solved expression to the terminal.
return q
else:
if op(left(q)) == '+':
solvingAdd(v, q)
else:
return "v not on left of q"
def solvingAdd(v, q):
print "solvingAdd"
if isInside(v, left(left(q))):
q2 = [left(left(q)), op(q), [right(q), '-', right(left(q))]]
return solving(v, q2)
elif isInside(v, right(left(q))):
q2 = [right(left(q)), op(q), [right(q), '-', left(left(q))]]
return solving (v, q2)
Выше - это запущенная, но урезанная версия моей программы, которая дублирует мою проблему. Если вы выполните этот файл в python и дайте ему команду print solve ('x', [['x', '+', 'b'], '=', 'c']), вы увидите возвращаемые Nones, которые дают мне неприятности.Python возвращает список, но переменной, но переменная имеет значение null
То, что эти функции должны делать ...
Функция влево возвращает переменную в первом элементе д.
Функция op возвращает оператор во втором элементе q.
Функция справа возвращает переменную в третьем элементе q.
Функция isInside увидит, что v существует в левой части q.
Функция решить испытает, если v находится на левой стороне д, что она есть, поэтому он будет вызывать решения для выполнения операций, необходимых для получения V только на левой стороне
Функция решение проверяет, является ли v одной левой частью q. Если это так, он должен вернуть q для решения, которое должно возвращать q на вход терминала печати. Если это не так, он будет работать по уравнению, чтобы получить v один слева.
Функция solveAdd выполняет операции и возвращает результат для решения.
- д список типов данных в виде [ 'someVariable1, 'someOperator', 'someVariable2']
Что вопрос ...
Кажется, что мой переменная q теряет свое присвоенное значение при вводе показанного оператора if. Я приведу пример, чтобы показать, почему я подозреваю это.
Многословный пример ... Допустим, я открываю питона в моем терминале и выполнить этот заданный файл, и я даю ему команду печати решить («х», [[ «х», «+», ' b '],' = ',' c ']). То, что я ожидаю в качестве вывода, - это уравнение, разработанное таким образом, что оно выглядит как ['x', '=', ['c', '-', 'b']]. Но я получаю Нет.
Теперь рассмотрим функцию решения, показанную выше. Предположим, что остальная часть моей программы правильная, и это правильно упорядочивает уравнение каждый раз. После д было решено иметь ст только на левой стороне (д [0]), решение будет называться 1 последний раз, когда будет принято решение, что v на самом деле одна из левой сторона.Это означает, что оператор , если v == левая (д): собирается оценить, правда, на последнем цикле и поэтому возвращение д к упомянутому решить функцию, которая будет возвращать ц к входу печати команды с терминала.
печати д утверждение в решение функции фактически выводит ожидаемое значение д к терминалу на последний цикл, но, когда попытки питона печатать возвращаемое значение (д), он не печатает None.
Любые предложения относительно того, что здесь происходит?
~ Макс
не возвращается None, как вы не указали возвращаемое значение, если v не равно остались –
Можете ли вы дать нам реальную, работоспособную, но урезанный, ' solve' и код, который вызывает эти функции, и показывать ожидаемый и фактический вывод, вместо того, чтобы пытаться описать его на половине страницы текста? См. [MCVE] (http://stackoverflow.com/help/mcve) для примера. – abarnert
Да, я сейчас работаю над созданием урезанного примера, который представляет мою проблему. Я редактирую сообщение, когда узнаю его. – GnUfTw