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, и он остановит цикл и распечатает результаты, но я не знаю, как вернуть значения, чтобы использовать их в других функциях.
intCalculate = Calculate(intInput)
intInput += intCalculate
кажется обратным, конечно, вы должны добавлять к intCalculate
, а не intInput
.
Вам нужно передать его как параметр. Для целых чисел это означает, что функция получает копию значения, поэтому вы не можете изменить исходное значение, если только вы не инкапсулируете его во что-то изменяемое.
Будет проще, если вы просто вернете новый номер и замените исходный на стороне вызывающего абонента.
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 Я оставил его намеренно, чтобы он соответствовал тому, как его реализовал ОП.
«Для целых чисел это означает, что функция получает копию значения, поэтому вы не можете изменить исходное значение». Нет, Python никогда не передает копию при вызове. На самом деле происходит то, что функция получает точно такое же значение, но не может его изменить, потому что целые числа неизменяемы. И, кроме того, функция также не может повторно связать имя, потому что оно не определено в той же лексической области видимости.
@wjandrea ОП явно начинает свое изучение Python, поэтому вдаваться в подробности о том, передается ли что-то по значению или ссылке, выходит за рамки того, что я пытался сделать, а именно, что исходное значение не может быть изменено
@Matias Да, правда, возможно, я переборщил: P Главное, что я пытался сделать, это то, что копирование не происходит, так что это вводит в заблуждение с образовательной точки зрения. Вы можете просто сказать: «Для целых чисел вы не можете изменить исходное значение, поэтому вместо этого вы можете вернуть совершенно новое число […]».
Вам нужно передать значение функции и зафиксировать возврат. Если вы хотите добавить возврат из Calculate в переменную intCalculate, вам нужно сделать что-то подобное в строке, в которой вы вызываете функцию.
intCalculate += Calculate(intInput)
И измените заголовок функции на:
Calculate(intCalculate):
# Code goes here
Для простоты вы можете использовать глобальные переменные.
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()
Но, пожалуйста, не делай этого.
Скорее, как предлагается, передавайте информацию через аргументы функции или инкапсулируйте состояние в объекты, где доступ к этому состоянию и изменения в нем можно контролировать с помощью методов.
вам нужно узнать о передаче параметров и возвращаемых значениях.