Как использовать переменные, определенные в одной функции, в другой?

def main():
    i = 0
    intInput = 0
    intCalculate = 0
    while intInput != -999:
        i += 1
        intInput = int(input("How many ounces of water did you drink each day?"))
        Calculate()
    print("You have drank " + str(intCalculate) + " ounces of water")
    print("For " + str(i) + " days")
    print("You drank an average of " + str(float(intCalculate / i)) + " ounces of water")

def Calculate():
    intInput += intCalculate
    return intCalculate

main()

Я пытаюсь использовать функцию вычисления для добавления ввода каждый раз, пока вы не наберете -999, и он остановит цикл и распечатает результаты, но я не знаю, как вернуть значения, чтобы использовать их в других функциях.

вам нужно узнать о передаче параметров и возвращаемых значениях.

Barmar 01.04.2023 00:32
intCalculate = Calculate(intInput)
Barmar 01.04.2023 00:33
intInput += intCalculate кажется обратным, конечно, вы должны добавлять к intCalculate, а не intInput.
Barmar 01.04.2023 00:34
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
3
63
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вам нужно передать его как параметр. Для целых чисел это означает, что функция получает копию значения, поэтому вы не можете изменить исходное значение, если только вы не инкапсулируете его во что-то изменяемое.

Будет проще, если вы просто вернете новый номер и замените исходный на стороне вызывающего абонента.

def Calculate(intInput, intCalculate):
    intCalculate += intInput
    return intCalculate

Тогда вам нужно:

intInput = int(input("How many ounces of water did you drink each day?"))
intCalculate = Calculate(intInput, intCalculate)

Конечно, intCalculate += intInput не делает ничего полезного; вы также можете просто использовать return intInput + intCalculate.

chepner 01.04.2023 00:45

@chepner Я оставил его намеренно, чтобы он соответствовал тому, как его реализовал ОП.

Matias Cicero 01.04.2023 00:46

«Для целых чисел это означает, что функция получает копию значения, поэтому вы не можете изменить исходное значение». Нет, Python никогда не передает копию при вызове. На самом деле происходит то, что функция получает точно такое же значение, но не может его изменить, потому что целые числа неизменяемы. И, кроме того, функция также не может повторно связать имя, потому что оно не определено в той же лексической области видимости.

wjandrea 01.04.2023 00:56

@wjandrea ОП явно начинает свое изучение Python, поэтому вдаваться в подробности о том, передается ли что-то по значению или ссылке, выходит за рамки того, что я пытался сделать, а именно, что исходное значение не может быть изменено

Matias Cicero 01.04.2023 17:18

@Matias Да, правда, возможно, я переборщил: P Главное, что я пытался сделать, это то, что копирование не происходит, так что это вводит в заблуждение с образовательной точки зрения. Вы можете просто сказать: «Для целых чисел вы не можете изменить исходное значение, поэтому вместо этого вы можете вернуть совершенно новое число […]».

wjandrea 01.04.2023 17:44

Вам нужно передать значение функции и зафиксировать возврат. Если вы хотите добавить возврат из Calculate в переменную intCalculate, вам нужно сделать что-то подобное в строке, в которой вы вызываете функцию.

intCalculate += Calculate(intInput)

И измените заголовок функции на:

Calculate(intCalculate):
    # Code goes here

https://www.learnpython.org/en/Функции

Для простоты вы можете использовать глобальные переменные.

intInput = 0
intCalculate = 0

def main():
    global intInput, intCalculate

    i = 0
    intInput = 0
    intCalculate = 0
    while intInput != -999:
        i += 1
        intInput = int(input("How many ounces of water did you drink each day?"))
        Calculate()
    print("You have drank " + str(intCalculate) + " ounces of water")
    print("For " + str(i) + " days")
    print("You drank an average of " + str(float(intCalculate / i)) + " ounces of water")

def Calculate():
    global intInput, intCalculate

    intInput += intCalculate
    return intCalculate

main()

Но, пожалуйста, не делай этого.

Скорее, как предлагается, передавайте информацию через аргументы функции или инкапсулируйте состояние в объекты, где доступ к этому состоянию и изменения в нем можно контролировать с помощью методов.

Другие вопросы по теме