Как мне взять информацию из одной функции для использования в другой в python без использования return? - PullRequest
0 голосов
/ 23 января 2019
def ind():
    galos = eval(input("What was the starting integer??\n"))
    galoe = eval(input("What was the ending integer?\n"))
    use = galoe - galos
    round(use,1)
    if (use < 4000000):
        fin = 1000
    elif (use > 4000000) and (use < 10000000):
        fin = 2000.00
    else:
        use1 = use - 10000000
        start = 2000.00
        fin = str(start + (0.00025 * use))
        print ("Your bill is:$" + fin)

def bill(code):
    print("Code:" + code)
    print("Beggining reading:" + galos)
    print("Ending reading:" + galoe)
    print("Gallons used:" + use)
    print("Money owed:$" + fin)

Я пишу базовый код, который создает «счет за воду».Я пытаюсь использовать galos в bill(), но получаю эту ошибку:

NameError: имя 'galos' не определено

Как я могуполучить эту информацию?

Ответы [ 4 ]

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

Как уже говорилось в других ответах, глобальные переменные - ваш золотой билет здесь. Вот один из способов, которым вы можете реализовать это:

def ind():
    global galos, galoe, use, fin
    galos = eval(input("What was the starting integer??\n"))
    galoe = eval(input("What was the ending integer?\n"))
    use = galoe - galos
    round(use,1)
    if (use < 4000000):
        fin = 1000
    elif (use > 4000000) and (use < 10000000):
        fin = 2000.00
    else:
        use1 = use - 10000000
        start = 2000.00
        fin = str(start + (0.00025 * use))
        print ("Your bill is:$" + fin)


def bill(code):
    # Use string formatting throughout print statements here,
    # string concatenation ("abc" + var) expects a string type.
    print("Code:%i" %code)
    print("Beggining reading:%i" %galos)
    print("Ending reading:%i" %galoe)
    print("Gallons used:%i" %use)
    print("Money owed:$%.2f" %fin)

galos = 0
galoe = 0
use = 0
fin = 0

ind()
bill(1234)

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

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

Есть две причины, чтобы написать функцию. Один из них - выполнить какое-то действие (пример print()), а другой - вычислить значения и вернуть их.

Вы говорите, что не хотите использовать return, но в функции, которая выполняет вычисления, не желая использовать return, нет особого смысла.

В конце вашей функции ind(), добавьте

return code, galos, galoe, use, fin

Звоните ind() как это:

code, galos, galoe, use, fin = ind()

и используйте эти возвращаемые значения в ваших print() вызовах.

Вы можете использовать для этого глобальные переменные, и это будет работать в игрушечной программе, но есть веские причины, если нет альтернативы.

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

Вы можете использовать простой класс в качестве контейнера для ваших данных:

class Bill:

    def __init__(self, code):
        self.code = code
        self.galos = eval(input("What was the starting integer??\n"))
        self.galoe = eval(input("What was the ending integer?\n"))

        self.use = self.galoe - self.galos

        self.use = round(self.use, 1)

        if (self.use < 4000000):
            self.fin = 1000
        elif (self.use > 4000000) and (self.use < 10000000):
            self.fin = 2000.00
        else:
            use1 = self.use - 10000000  # not used?
            start = 2000.00
            self.fin = str(start + (0.00025 * self.use))
            print ("Your bill is:$" + self.fin)

        self.bill()  # this will call the class method 'bill' 
                     # defined below and generate the output

    def bill(self):
        print("Code:", self.code)
        print("Beggining reading:", self.galos)
        print("Ending reading:", self.galoe)
        print("Gallons used:", self.use)
        print("Money owed:$", self.fin)


if __name__ == '__main__':
    bill = Bill(5234)

Выполнение этого приведет к выводу:

What was the starting integer??
123
What was the ending integer?
1235
Code: 5234
Beggining reading: 123
Ending reading: 1235
Gallons used: 1112
Money owed:$ 1000
0 голосов
/ 23 января 2019

Используйте глобалы (я не рекомендую)

# Start script
globals galos, galoe, use, fin


def ind():
    globals galos, galoe, use, fin
    galos = eval(input("What was the starting integer??\n"))
    ...

Я рекомендую вам тоже посмотреть на классы

...