我需要檢查輸入字符串是否以此特定形式x,y
,因爲我需要這些座標。我得到這個作爲我輸入的問題:檢查字符串是否是Python中的特定形式
x, y = input("Place wall in x,y give q to quit : ").split(",")
但我要如何檢查用戶是否確實給它的形式x,y
?
我需要檢查輸入字符串是否以此特定形式x,y
,因爲我需要這些座標。我得到這個作爲我輸入的問題:檢查字符串是否是Python中的特定形式
x, y = input("Place wall in x,y give q to quit : ").split(",")
但我要如何檢查用戶是否確實給它的形式x,y
?
import re
p = re.compile("^\d+,\d+$");
while True:
string = input("Place wall in x,y give q to quit : ")
if p.match(string):
break
然後,您可以像以前一樣從string
中獲取值。
如果您的字符串格式不正確(沒有逗號,有太多逗號...),因爲split()
方法的數組大小會錯誤,所以解包會拋出ValueError
。所以你可以抓住它。
try:
x, y = input("Place wall in x,y give q to quit : ").split(",")
except ValueError:
print("Unexpected input")
您可以使用正則表達式https://docs.python.org/3.5/library/re.html作爲模式匹配的一般解決方案。
你也可以把你需要在嘗試做不同的塊這樣的
try:
handle_input()
except Exception as e:
print ("input not correct")
另一個答案,只是因爲數據轉換。
def check_input(s):
if s.strip() in ['q', 'Q']:
raise SystemExit("Goodbye!")
try:
x, y = s.split(',')
# Or whatever specific validation you want here
if int(x) < 0: raise AssertionError
if int(y) < 0: raise AssertionError
return True
except (ValueError, AssertionError):
return False
print(check_input("1,3")) # True
print(check_input("foo")) # False
您不應該依賴'assert'進行輸入驗證。 Python不保證它們會運行。當給出'-O'時,它們不是。如果必須,請使用'if x:raise AssertionError'。 –
有趣,我不知道。 –