В Python используются три функции в цикле, где третий вывод является новым входом для всех трех - PullRequest
0 голосов
/ 08 января 2019

Я думаю, что лучший способ описать то, что я пытаюсь решить, состоит в следующем:

У меня есть цикл из трех функций, где изначально входное значение задается пользователем, скажем, input1. Затем первые две функции, скажем, function1 и function2 используют этот вход для создания числа, скажем, output1 и output2.

Тогда третья функция также принимает изначально заданное входное значение и теперь использует output1 и output2 для изменения ввода, делая его input2.

Теперь я хочу сделать все это снова, но используя input2 в качестве нового входа для всех трех функций. По какой-то причине я не могу сделать это в Python. Поскольку он всегда будет использовать это изначально заданное входное значение для функций.

Я сделал output1 и output2 глобальными, поэтому его можно использовать в function3. function3 возвращает «новый» input1, который я хочу использовать в качестве ввода для следующей итерации, но это не работает.

def function1(input1):
    global output1
    output1 = input1 * 3
    return output1

def function2(input1):
    global output2
    output2 = input1 * 4
    return output2

def function3(input1):
    output3 = input1 * output1 * output2
    input1=output3
    return input1

input1 = float(raw_input('Please give some input number: '))

for i in range(2):
    function1(input1)
    function2(input1)
    function3(input1)

Если я введу значение '2' на первой итерации, это даст:

output1 становится 6

output2 становится 8

output3 становится 96

Тогда для итерации 2 я бы ожидал 96 в качестве ввода, и, таким образом,

output1 становится 288

output2 становится 384

output3 становится 10616832.

Но вместо этого он просто повторяет первый цикл с точно такими же значениями.

1 Ответ

0 голосов
/ 08 января 2019

Просто обновите входную переменную после того, как function3 запустится следующим образом:

for i in range(2):
    function1(input1)
    function2(input1)
    input1 = function3(input1)

Редактировать: Я думаю, что вы пытаетесь сделать две разные вещи одновременно. Вы пытаетесь сделать output1 и output2 глобальными, чтобы function3 мог ссылаться на них. Однако вы также возвращаете output1 и output2, как будто они не являются глобальными, а скорее должны быть переданы по значению в локальную область. Как правило, глобальные переменные следует использовать только в случае крайней необходимости. Глобальные переменные могут быть прочитаны / перезаписаны кем угодно, что затрудняет отслеживание значения и того, кто его изменил последним. Очень сложно отлаживать. Давайте просто сделаем все локальными переменными, перехватывая значения, которые ваши функции уже return.

def function1(x):
    return x * 3

def function2(x):
    return x * 4

def function3(x, y, z):
    return x * y * z

input1 = float(input('Please give some input number: '))

for i in range(2):
    output1 = function1(input1)
    output2 = function2(input1)
    input1 = function3(input1, output1, output2)
    print(input1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...