首页 > 解决方案 > Python中的全局变量声明错误

问题描述

我对 Python / 编程还很陌生,大约四个月前我开始了,因为我是一名教师,可能有更多的时间在我手上。

对于我的第一个项目,我已经开始开发一个披萨订购系统——目前我只是让用户通过终端与程序进行交互。但是,我计划明显地使用 Django 创建一个网页,以便用户可以实际与之交互。

我将首先分享我的代码:

import re

sizePrice = {
    'small': 9.69, 
    'large': 12.29, 
    'extra large': 13.79, 
    'party size': 26.49 }

toppingList = [ 'Anchovies', 'Bacon', 'Bell Peppers', 'Black Olives',
'Chicken', 'Ground Beef', 'Jalapenos', 'Mushrooms',
'Pepperoni','Pineapple', 'Spinach']

pickupCost = 0 deliveryCost = 5.0


running = True 


def pick_or_delivery():
    global delivery 
    print('\nWill this be for pick up or delivery?')
    delivery = input("P - pick up / D - delivery")
    delivery = delivery.title() # changes the letter inputted to an upper case. 
    print(f'This order will be for {delivery}')

    if delivery == "D":
        while running == True:
            global customerName 
            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:
            global customerPhoneNumber
            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:
            global streetName
            streetName = input("Street 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

    elif delivery == "P":
        while running == True:
            global customerName 
            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: 
                print("Please enter P or D")
                customerName = customerName.title()
                break
        
        while running == True:
            global customerPhoneNumber
            customerPhoneNumber = input("\nEnter a phone number we can contact you at: ")
            customerName = customerName.title()
            if not re.match("^[0-9 ]*$", customer_telephone): 
                print("Please use numbers only")
            elif len(customer_telephone) == 0:  
                print("Please enter a valid input")
            else:
                break 
    else:
        print("Please enter P or D ")
        pick_or_delivery()

pick_or_delivery()

当我运行此代码时,我收到以下信息:

SyntaxError: name 'customerName' is used prior to global declaration

我知道问题出在我的全局变量中,但是在我的代码中,我在调用全局变量之前放置了它。所以我有点困惑。位置不正确吗?如果是这样,它应该去哪里?

标签: python

解决方案


我认为这是因为您在 if 语句中对 customerName 进行了全球化。尝试在函数的开头创建一个名为 customerName 的变量,并给它一个空白值,然后在函数的开头将其全球化。


推荐阅读