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

    def take_customer_order():
    new_pizza = input("Order a pizza?  (Y/N) ")
    if new_pizza.upper() == "N":
        return print("Have a nice day.")
    if new_pizza.upper() != "Y" and new_pizza.upper() != "N":
        return print("I'll take that as a no.  Have a nice day.")
    size, meats, veg, quantity = get_pizza_info(size=0, meats=0, veg=0, quantity=0)
    if size == 1:
        size_cost = 6.50
    if size == 2:
        size_cost = 9.50
    if size == 3:
        size_cost = 11.50
    meats_cost = (meats - 1) * 3.50
    veg_cost = (veg - 1) * 1.50
    order_total = 0
    pizza_total = (size_cost + meats_cost + veg_cost * quantity)
    print("Pizza total: $", "{:,.2f}".format(pizza_total))
    order_total += pizza_total
    while new_pizza != "N":
        new_pizza = input("Order a pizza?  (Y/N) ")
        if new_pizza.upper() == "N":
            break
        get_pizza_info(size, meats, veg, quantity)
        print("Pizza total: $", "{:,.2f}".format(pizza_total))
        order_total += pizza_total
    print("Your total is $", "{:,.2f}".format(order_total))
    return order_total, pizza_total

Вот где я добавил новую функцию, чтобы, надеюсь, сделать order_total глобальным:

def make_order_total_global():
    take_customer_order.order_total()
    return take_customer_order.order_total()

Это был исходный код, который я отправил, у которого возникли проблемы с вызовом order_total.

def run_roccos_pizza_shop():
    revenue = 0
    patron_num = 0
    while True:
        partynum = input("Enter number in party or 'Close' to quit. ")
        if partynum.upper() == "CLOSE":
            print("Have a nice day!")
            break
        else:
            patron_num += int(partynum)
        revenue += take_customer_order.order_total()
    print("Customers served: ", patron_num)
    print("Total revenue $", "{:,.2f}".format(revenue))
    return patron_num, revenue

Вот и все. очевидно, поскольку мое редактирование - это в основном код, мне нужны более подробные сведения. Deets deeeties deeetily doooooo

1
Grelm 25 Окт 2021 в 00:11

2 ответа

Лучший ответ

Вы не можете вызвать функцию take_customer_order.order_total (), потому что она имеет локальную видимость в функции take_customer_order () и должна иметь глобальную видимость, чтобы быть вызванной. Я рекомендую распаковать на две отдельные функции, чтобы обеспечить глобальную видимость функции take_customer_order.order_total ().

Бывший. из:

def hi ():
    def hello ():
        print ("hello")
    hello ()

to:
def hello ():
    print ("hello")

def hi ():
    hello ()

Обновить:

Попробуй это:

def make_order_total_global():
    return take_customer_order()[0]
2
Gaetano Marchianò 25 Окт 2021 в 01:10
Я сделал другую функцию и вызвал take_customer_order.order_total (), но это не сделало ее видимой
 – 
Grelm
25 Окт 2021 в 00:45
Дайте мне посмотреть код, пожалуйста!
 – 
Gaetano Marchianò
25 Окт 2021 в 00:47
Важно то, что теперь вы можете вызывать функцию без возникновения каких-либо исключений.
 – 
Gaetano Marchianò
25 Окт 2021 в 00:48
Хорошо, @Gaetano. Я отредактировал свою заявку, чтобы показать больше кода. Спасибо за помощь
 – 
Grelm
25 Окт 2021 в 00:54
1
Значение, возвращаемое функцией «take customer order ()», на самом деле является кортежем. Чтобы получить только значение «order_total», вы можете просто написать: return take_customer_order () [0]
 – 
Gaetano Marchianò
25 Окт 2021 в 01:03

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

0
lunastarwarp 25 Окт 2021 в 00:15
1
Take_customer_order возвращает order_total (в конце своей собственной функции)
 – 
Grelm
25 Окт 2021 в 00:18
2
Затем высказывание revenue += take_customer_order() должно решить вашу проблему, но когда вы вызываете take_customer_order(), он не сохраняет то, что возвращает, ни в чем в приведенном выше коде
 – 
lunastarwarp
25 Окт 2021 в 00:21
Когда я делаю доход + = take_customer_order (), он говорит, что я пытаюсь использовать операнд + = для int и кортежа
 – 
Grelm
25 Окт 2021 в 00:36