Невозможно использовать переменную в функции: «Неразрешенная ссылка» - PullRequest
3 голосов
/ 13 мая 2019

Я очень плохо знаком с Python (~ 8 часов опыта и учебы в течение двух дней) и выполняю некоторые самостоятельные упражнения, чтобы практиковать только что изученную информацию. В настоящее время сосредоточены на занятиях и функциях. Код касается продажи фруктов: есть класс фрукты, который принимает имя, цвет, price_usd и его объекты. Существует также список «корзины покупок» и total_cost (изначально установлен как 0). Я заставил код работать должным образом, однако теперь стараюсь не повторять код, используя функции.

Я создал функцию под названием «покупка», которая печатает, какой фрукт был выбран, добавляет его в корзину и добавляет его значение в total_cost. Однако я получаю «Неразрешенную ссылку» для total_cost (но не для корзины покупок, которая также является переменной вне функции?)

Error message: "UnboundLocalError: local variable 'total_cost' referenced before assignment)

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

Попытка создания total_cost до и после функции. Также попытался «вручную» добавить fruit_choice.price_usd к total_cost: "total_cost = total_cost + fruit_choice.price_usd" Он создал локальную переменную "total_cost" и выдал "неразрешенную ссылку" для второй total_cost

import fruit as fr


apple = fr.Fruits("Apple", "red", price_usd=0.88)

shopping_cart = []

# total_cost = 0


def buy(fruit_choice):

    print(f"A(n) {fruit_choice.name} has been added to your shopping cart.")

    shopping_cart.append(fruit_choice.name)
    ##############################################
    total_cost += fruit_choice.price_usd

    print(f" The total cost is: {total_cost}")
    ##############################################

total_cost = 0

print(shopping_cart, "\n", buy(apple))

(Между ### ... и находится сообщение об ошибке.)

Я ожидал, что fruit_choice.price_usd будет добавлен к total_cost. Было бы проще, если бы это было так, так как это один и тот же код для каждого фрукта.

Заранее благодарим за вашу драгоценную помощь!

1 Ответ

1 голос
/ 13 мая 2019

если вы хотите использовать переменную, созданную вне функции, вам нужно передать ее в качестве параметра или использовать глобальное ключевое слово, например, так:

Использование ключевого слова global:

apple = fr.Fruits("Apple", "red", price_usd=0.88)

shopping_cart = []

# total_cost = 0


def buy(fruit_choice):


    print(f"A(n) {fruit_choice.name} has been added to your shopping cart.")
    global total_cost;
    shopping_cart.append(fruit_choice.name)
    ##############################################
    total_cost += fruit_choice.price_usd

    print(f" The total cost is: {total_cost}")
    ##############################################

total_cost = 0

print(shopping_cart, "\n", buy(apple))

Как параметр:

apple = fr.Fruits("Apple", "red", price_usd=0.88)

shopping_cart = []

# total_cost = 0


def buy(fruit_choice,total_cost):


    print(f"A(n) {fruit_choice.name} has been added to your shopping cart.")
    global total_cost;
    shopping_cart.append(fruit_choice.name)
    ##############################################
    total_cost += fruit_choice.price_usd
    print(f" The total cost is: {total_cost}")
    return total_cost
    ##############################################

total_cost=buy(apple)
print(shopping_cart, "\n",total_cost)

Переменные total_cost необходимо создать до первого вызова buy(), не важно, были ли они созданы до или после определения buy()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...