我有一个问题,用户可以输入空格或什么也不能输入,仍然通过程序,我该如何防止这种情况发生?我仍然是python的初学者。
def orderFunction(): # The function which allows the customer to choose delivery or pickup
global deliveryPickup
deliveryPickup = input("Please input delivery or pickup: d for delivery p for pickup")
if deliveryPickup == "d":
global customerName
while True:
try:
customerName = (input("Please input your name"))
if customerName == (""):
print("Please input a valid name")
else:
break
global customerAddress
while True:
try:
customerAddress = (input("Please input your name"))
if customerAddress == (""):
print("Please input a valid Address")
else:
break
global customerPhnum
while True:
try:
customerPhnum = int(input("Please input your phone number"))
except ValueError:
print("Please input a valid phone number")
else:
break
print("There will also be a $3 delivery surcharge")
elif deliveryPickup == "p":
customerName = (input("Please input your name"))
if customerName == (""):
print("Please input a valid name")
orderFunction()
else:
print("Please ensure that you have chosen d for Delivery or p for Pickup")
orderFunction()
orderFunction()
这是我尝试执行的操作,但是此刻我遇到各种无法缩进和缩进的错误,我认为我的while循环可能是错误的。
本质上来说,如果我输入一个空格或按回车键就会存储其中一个客户输入内容(例如,customerName)。需要防止这种情况,我尝试使用显然没有用的while循环来修复它。
希望有人能解决这个问题
非常感谢。
答案 0 :(得分:0)
尝试使用regular expression来检查“ A-Z”之间是否插入了任何字符,如果没有,请输入错误
答案 1 :(得分:0)
代替立即使用输入,您可以创建类似于此功能的功能,仅允许有效输入。
您可以使用此valid_input
函数代替input
。
def valid_input(text):
not_valid = True
res = ''
while not_valid:
res = input(text)
if res.split(): # if text is empty or only spaces, this creates an empty list evaluated at False
not_valid = False
return res
这里的检查非常简单:不允许任何由空格或空格组成的文本,我们将继续要求相同的输入,直到提供有效信息为止。
我使这段代码很简单,以便您有一个大致的了解。但是您可以根据自己的喜好更改验证测试,还可以输出警告,说明为什么不允许输入,以便此人知道该怎么做。您可以使用正则表达式进行更高级的验证,也许您需要最小文本长度等...
答案 2 :(得分:0)
您有一个缩进错误,因为您有一个try
语句而没有相应的except
。
您需要两者都可以使其正常工作(就像在“电话号码”部分中所做的一样)。
这里是try / except的链接:docs
此外,您可以按照this答案中的说明检查字符串是否为空。
例如,您要编写:
try:
customerName = input("Please input your name")
if not customerName:
print("Please input a valid name")
else:
break
except ValueError:
print("Please input a valid name")
尽管以上内容似乎有点多余,所以如果客户名称为空,您可能想引发一个异常,在except
块中捕获该异常,打印警告并返回错误(或其他错误)。
try:
customerName = input("Please input your name")
if not customerName:
raise ValueError
except ValueError:
print("Please input a valid name")
else:
break
答案 3 :(得分:0)
您正在寻找的是str.strip
方法,该方法可以删除字符串中的尾随空格。
另外,我认为尝试并不特别适合您的需求。
customerName = input("Please input your name")
while not customerName.strip():
customerName = input("Please input a valid name")
对于电话号码,我不会转换为整数,因为如果电话号码以零开头,则不会存储它们。
答案 4 :(得分:0)
while循环是一个不错的解决方案,您只需要在if语句中添加更多检查即可。
首先,您不需要在前两个循环中使用try语句。除非您期望遇到错误,否则不要使用try语句,您需要使用except语句来处理该错误,就像在底部的while循环中一样。
然后,您只需要在前两个循环中添加更多条件,就不知道您要防止的确切情况,但是您可以尝试检查输入的长度,也可以查看此答案以获取一种有趣的方法: https://stackoverflow.com/a/2405300/8201979
答案 5 :(得分:0)
尝试添加另一个为true的拣货和交货选项,以防止接收其他投入物
答案 6 :(得分:0)
您不需要任何尝试/例外(无论如何都可以尝试)。
很难弄清楚您要做什么,是否要在传递空字符串时引发异常,还是要求用户提供其他输入?您目前似乎一半都在实现。
如果是后者,则类似的方法会起作用。
def func(fieldname):
while True:
val = input("Please input your {}".format(fieldname))
if val.strip() != "":
break
else:
print("Please input a valid {}".format(fieldname))
return val
delivery_pickup = input("Please input delivery or pickup: d for delivery p for pickup")
if delivery_pickup == "d":
customer_name = func("name")
address = func("address")
phone_number = func("phone number")
答案 7 :(得分:0)
.strip()
删除字符串前后的所有制表符或空格。
含义所有空格==空字符串。所有制表符==空字符串。因此,您只需检查该字符串的长度!= 0还是该字符串不为空。只需使用无限循环就可以继续强制正确的输入。
作为提示,您也不必将自己局限于一个功能。 这是下面的工作代码。
def getNonBlankInput(message, error_message):
x = input(message)
while len(x.strip()) == 0:
x = input(error_message)
return x
def getValidIntegerInput(message, error_message):
msg = message
while(True):
try:
x = int(input(msg))
break
except ValueError:
msg = error_message
return x
def orderFunction(): # The function which allows the customer to choose delivery or pickup
global deliveryPickup
global customerName
global customerAddress
global customerPhnum
deliveryPickup = input("Please input delivery or pickup: d for delivery p for pickup")
if deliveryPickup == "d":
customerName = getNonBlankInput("Please input your name: ", "Please input a valid name: ")
customerAddress = getNonBlankInput("Please input your address: ", "Please input a valid address: ")
customerPhnum = getValidIntegerInput("Please input your phone number: ", "Please input a valid phone number: ")
print("There will also be a $3 delivery surcharge")
elif deliveryPickup == "p":
customerName = getNonBlankInput("Please input your name: ", "Please input a valid name: ")
else:
print("Please ensure that you have chosen d for Delivery or p for Pickup")
orderFunction()
orderFunction()