python - 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
我知道问题出在我的全局变量中,但是在我的代码中,我在调用全局变量之前放置了它。所以我有点困惑。位置不正确吗?如果是这样,它应该去哪里?
解决方案
我认为这是因为您在 if 语句中对 customerName 进行了全球化。尝试在函数的开头创建一个名为 customerName 的变量,并给它一个空白值,然后在函数的开头将其全球化。
推荐阅读
- android - 点击时使轮播卡全屏
- java - 无法使用带有球衣 2 的文件执行 multipart/form-data 请求。错误 400
- ruby-on-rails - Bullet::Notification::UnoptimizedQueryError on rails 规范
- command-line - 在awk中使用多个字段分隔符重命名多个文件
- wireguard - Wireguard 无法连接 Qnap NAS
- arrays - 如何将一组串行数据连续发送到多个函数中,数据随处更新?
- testing - 如何使用 cypress 拦截所有请求以测试响应状态
- python - How to animate chart with multiple y axis (python)
- python - 基于布尔值从一片多索引数据帧中删除行
- substrate - 运行 substrate-front-end-template$ yarn install 时出错