2016-12-10 68 views
1

我需要檢查輸入字符串是否以此特定形式x,y,因爲我需要這些座標。我得到這個作爲我輸入的問題:檢查字符串是否是Python中的特定形式

x, y = input("Place wall in x,y give q to quit : ").split(",") 

但我要如何檢查用戶是否確實給它的形式x,y

回答

2
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中獲取值。

1

如果您的字符串格式不正確(沒有逗號,有太多逗號...),因爲split()方法的數組大小會錯誤,所以解包會拋出ValueError。所以你可以抓住它。

try: 
    x, y = input("Place wall in x,y give q to quit : ").split(",") 
except ValueError: 
    print("Unexpected input") 
1

您可以使用正則表達式https://docs.python.org/3.5/library/re.html作爲模式匹配的一般解決方案。

你也可以把你需要在嘗試做不同的塊這樣的

try: 
    handle_input() 
except Exception as e: 
    print ("input not correct") 
0

另一個答案,只是因爲數據轉換。

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 
+1

您不應該依賴'assert'進行輸入驗證。 Python不保證它們會運行。當給出'-O'時,它們不是。如果必須,請使用'if x:raise AssertionError'。 –

+0

有趣,我不知道。 –

相關問題