#python
#python
Вопрос:
Переменная Total bottles в модуле getBottles сбрасывается в 0 при выходе из цикла while counter <8. Я также пытался использовать операторы return, но безрезультатно. Как мне получить значение из переменной totalBottles для передачи в мой другой модуль.
global totalBottles, totalPayout, todayBottles
totalBottles=0 #store the accumulated bottle values
counter=1 #will control the loop
todayBottles=0 #store the number of bottles returned on a day
totalPayout=0 #store the calculated value of totalBottles x.10
def main():
keepGoing='y'
while keepGoing =='y':
getBottles (totalBottles, todayBottles, counter)
calcPayout (totalBottles, totalPayout)
printInfo(totalBottles, totalPayout)
keepGoing == raw_input ('Do you want to run the program again?')
def getBottles (totalBottles, todayBottles, counter):
while counter <8:
todayBottles = input ('Enter number of bottles returned for the day:')
totalBottles = todayBottles totalBottles
counter=counter 1
def calcPayout(totalBottles, totalPayout):
totalPayout = totalBottles * .10
def printInfo(totalBottles, totalPayout):
print totalBottles,('is the total bottles')
print totalPayout, ('amount due')
main()
Комментарии:
1. Это … почти невероятно… Я, честно говоря, удивлен!
2. Я понятия не имею, что это значит.
3. Извините, но эта проблема не дает мне покоя с прошлой ночи. Я действительно хочу разобраться в этом. Как бы вы справились с выводом числа. Я новичок, и меня направили спросить онлайн.
Ответ №1:
я не могу удержаться … (хотя с этим все еще есть проблемы, по крайней мере, это может сработать там, где другое не сработает)
class Bottles:
def __init__(self):
self.totalBottles=0 #store the accumulated bottle values
self.counter=1 #will control the loop
self.todayBottles=0 #store the number of bottles returned on a day
self.totalPayout=0 #store the calculated value of totalBottles x.10
def getBottles(self):
while self.counter <8:
self.todayBottles = input ('Enter number of bottles returned for the day:')
self.totalBottles = self.todayBottles self.totalBottles
self.counter=self.counter 1
def calcPayout(self):
self.totalPayout = self.totalBottles * .10
def printInfo(self):
print self.totalBottles,('is the total bottles')
print self.totalPayout, ('amount due')
def main():
keepGoing='y'
while keepGoing =='y':
b = Bottles()
b.getBottles()
b.calcPayout()
b.printInfo()
keepGoing == raw_input ('Do you want to run the program again?')
main()
Ответ №2:
если вы хотите использовать глобальные переменные, вы также должны указать это в функции :
global totalBottles, totalPayout, todayBottles
totalBottles=0 #store the accumulated bottle values
counter=1 #will control the loop
todayBottles=0 #store the number of bottles returned on a day
totalPayout=0 #store the calculated value of totalBottles x.10
def main():
global totalBottles, totalPayout, todayBottles
keepGoing='y'
while keepGoing =='y':
getBottles (counter)
calcPayout ()
printInfo(totalBottles, totalPayout)
keepGoing == raw_input ('Do you want to run the program again?')
def getBottles (counter):
global totalBottles, todayBottles
while counter <8:
todayBottles = input ('Enter number of bottles returned for the day:')
totalBottles = todayBottles totalBottles
counter=counter 1
def calcPayout():
global totalBottles, totalPayout, todayBottles
totalPayout = totalBottles * .10
def printInfo(totalBottles, totalPayout):
print totalBottles,('is the total bottles')
print totalPayout, ('amount due')
main()
в противном случае вы могли бы использовать возвращаемые значения :
global totalBottles, totalPayout, todayBottles
totalBottles=0 #store the accumulated bottle values
counter=1 #will control the loop
todayBottles=0 #store the number of bottles returned on a day
totalPayout=0 #store the calculated value of totalBottles x.10
def main():
keepGoing='y'
while keepGoing =='y':
totalBottles = getBottles(totalBottles, todayBottles)
totalPayout = calcPayout (totalBottles)
printInfo(totalBottles, totalPayout)
keepGoing == raw_input ('Do you want to run the program again?')
def getBottles (totalBottles, todayBottles):
counter=1
while counter <8:
todayBottles = input ('Enter number of bottles returned for the day:')
totalBottles = todayBottles totalBottles
counter=counter 1
return totalBottles
def calcPayout(totalBottles):
totalPayout = totalBottles * .10
return totalPayout
def printInfo(totalBottles, totalPayout):
print totalBottles,('is the total bottles')
print totalPayout, ('amount due')
main()
Комментарии:
1.
def getBottles (totalBottles, todayBottles, counter): global totalBottles, todayBottles
вызовет ошибку, потому что вы объявляете totalBottles и todayBottles как локальную, так и глобальную переменную.SyntaxError: name 'totalBottles' is local and global
Ответ №3:
Может ли проблема быть связана с областью видимости? Кажется, вы объявили глобальные переменные, а затем передаете их в своих вызовах метода. Интересно, не запутался ли он, используя локальный totalBottles вместо глобального. Попробуйте это, не передавая ваши глобальные переменные.
Комментарии:
1. Черт возьми, я как раз собирался опубликовать это:-(Я на самом деле протестировал это, и если у вас есть все методы, такие как
def getBottles (totalBottles, todayBottles, counter): ...
bedef getBottles(): global totalBottles, todayBottles, counter
, это работает
Ответ №4:
Использование global
в глобальном пространстве имен ничего не дает. Если вы хотите обновить глобальную из функции, вы должны использовать ее там:
def calcPayout():
global totalPayout
totalPayout = totalBottles * .10 # now the global gets updated
Вы должны сделать это для всех ваших функций.
Гораздо, гораздо более разумный способ — использовать return:
def calcPayout(totalBottles):
return totalBottles * .10
totalPayout = calcPayout(totalBottles)