使用其他函数中的变量

时间:2020-07-20 20:49:22

标签: python python-3.x oop

希望我的代码和问题清楚易懂。如果不是,请提供反馈。

我对编程/编码还不是很陌生,所以我决定使用Python开发类似于披萨点餐系统的程序。我最终希望使用此代码通过Django或Flask开发网站。

我刚刚完成了该程序的第一步,我在询问用户是否要提货。根据用户选择的程序,程序会要求提供特定信息。

我觉得我最努力的领域是开发类和函数。特别是从一个函数中获取一个变量,然后在另一个函数中使用该变量。我发布了代码的过去示例,并被告知全局变量不适用于代码。因此,我非常努力地避免使用它们。

以下是参考代码:

import re 

running = True

class PizzaOrderingSys():
"""order a customized pizza for take out or delivery """

    def delivery_or_pickup(self): # Is the order for devilery or pickup?
        print("\nWill this order be for pickup or delivery?")
        self.delivery = input("P - pick up / D - delivery : ")
        self.delivery = self.delivery.title()

        if self.delivery == "D":
            while running == True:
                customerName = input("\nName for the order: ")
                if not re.match("^[a-zA-Z ]*$", customerName):
                    print("Please use letters only")
                elif len(customerName) == 0:
                    print("Please enter a vaild input")
                else: 
                    customerName = customerName.title()
                    break

            while running == True:
                customerPhoneNumber = input("\nEnter a phone number we can contact you at: ")
                if not re.match("^[0-9 ]*$", customerPhoneNumber): 
                    print("Please use numbers only")
                elif len(customerPhoneNumber) == 0: 
                    print("Please enter a a contact phone number")
                else: 
                    break 

            while running == True: 
                house_num = input("\nWhat is your house or unit number: ")
                if not re.match("^[0-9 /]*$", house_num):
                    print("Please use numbers only")
                elif len(house_num) == 0:
                    print("Please enter a valid input ")
                else: 
                    break

            while running == True:
                streetName = input("\nStreet name: ")
                if not re.match("^[a-zA-Z ]*$", streetName): 
                    print('Please use letters only.')
                elif len(streetName) == 0: 
                    print("Please enter a valid input")
                else:
                    streetName = streetName.title()
                    break

            while running == True: 
                city = input("\nCity: ")
                if not re.match("^[a-zA-Z ]*$", city): 
                    print("Please use letters only")
                elif len(city) == 0: 
                    print("Please enter a valid input")
                else:
                    city = city.title()
                    break

            while running == True:
                zip_code = input("\nZip Code:")
                if not re.match("^[0-9 /]*$", zip_code): 
                    print("Please use numbers only")
                elif len(zip_code) == 0 or len(zip_code) > 5: 
                    print("Please enter a valid input")
                else:
                    break 

        elif self.delivery == "P":
            while running == True:
                customerName = input("\nName for the order: ")
                if not re.match("^[a-zA-Z ]*$", customerName): 
                    print("Please use letters only")
                elif len(customerName) == 0: 
                    print("Please enter a valid input")
                else: 
                    customerName = customerName.title()
                    break
                
            while running == True:
                customerPhoneNumber = input("\nEnter a phone number we can contact you at: ")
                if not re.match("^[0-9 ]*$", customerPhoneNumber): 
                    print("Please use numbers only")
                elif len(customerPhoneNumber) == 0:  
                    print("Please enter a valid input")
                else:
                    break 
        else:
            print("Please enter P or D ")
            delivery_or_pickup() 

order = PizzaOrderingSys()
order.delivery_or_pickup()

我的问题是:我将如何使用在类的一个函数中找到的变量,并在以后的另一个函数中使用它?

例如,如果我想检索在delivery_or_pick()函数中找到的变量customerName,customerPhoneNumber,house_num,streetName,city,Zip_code并将其用于名为:

def customer_receipt(): 

我需要对现有代码或def customer_receipt()函数进行哪些操作以获取该信息?

任何对我的问题的帮助或对其他任何建议都非常适合您。 这是我在Stackoverflow上发表的第二篇文章,因此,我仍不清楚正在问的内容不清楚或问题的格式可能已关闭,对此我深表歉意。 再次谢谢你。

1 个答案:

答案 0 :(得分:0)

这里的想法是,您可以使用类变量在方法调用之间保存数据。方法是属于类的函数。例如,您可以使用Python的类初始化并创建命令字典。这是此类系统的一个简单示例,请注意self关键字的用法。 self引用了该类的实例,您可以使用它来访问该实例的变量或方法:

class PizzaOrderingSys:
    def __init__(self):
        # Initializing some class variables
        self.running = True # Now you can use self.running instead of global running variable
        self.orders = {}

    def delivery_or_pickup(self):
        # Somewhere at the end where you have collected the needed info
        order = {
            "zip_code": zip_code,
            "city": city,
            # You can enter all of the needed data similarly
        }

        order_id = "SomeIdHere" # ID could be anything, it just should be unique
        self.orders[order_id] = order 
        return order_id 
    
    def customer_receipt(self, id):
        # Now you can access all of the order here with self.orders

        order = self.orders.get(id) # Select some specific order with id.
                                    # Using get to avoid the situation
                                    # where no orders or invalid id would raise an exception
        if order:
            receipt = f"Order {id}:\nCustomer city {order['city']}"
        else:
            receipt = None
        return receipt

pizzasystem = PizzaOrderingSys()
order_id = pizzasystem.delivery_or_pickup()
receipt = pizzasystem.customer_receipt(order_id)
print(receipt) 
# >>> Order 1235613:
#     Customer city Atlantis

我建议您阅读有关类的更多信息,例如python文档对它们有很好的material

相关问题