2017-03-03 75 views
0

我想驗證進入列表的輸入。輸入需要是一個整數。如果我輸入一個整數或單個字母,它的工作方式如何。但是如果我輸入像'qw'這樣的程序就會崩潰。我能做些什麼來更好地驗證輸入?這裏是我的代碼:輸入驗證python 2.7.13

def getPints(pints): 
    counter = 0 
    while counter < 7: 
     pints[counter] = raw_input("Enter the number of pints donated: ") 
     check = isinstance(pints[counter], int) 
     while check == False: 
      print "Please enter an integer!" 
      pints[counter] = input("Enter the number of pints donated: ") 
     counter = counter + 1 

回答

0

書面,check將始終評估爲False,因爲只有raw_input()返回一個字符串,從來沒有一個整數。然後你會陷入無限的while循環中,因爲你沒有更新check。使用字符串isdigit()方法代替isinstance

check = pints[counter].isdigit() 

您還需要在循環內重新評估check。但是,真的,你根本不需要check

pints[counter] = raw_input("Enter the number of pints donated: ") 
while not pints[counter].isdigit(): 
    print "Please enter an integer!" 
    pints[counter] = raw_input("Enter the number of pints donated: ") 

我懷疑你也想pints[counter]轉換爲int一旦你有一個合適的輸入。

您正在使用LBYL方法(在您飛躍之前)。您也可以使用EAFP(比允許更容易地詢問寬恕)方法,只是嘗試將輸入轉換爲int並在輸入錯誤時捕獲異常:

while True: 
    try: 
     pints[counter] = int(raw_input("Enter the number of pints donated: ")) 
     break 
    except ValueError: 
     print "Please enter an integer!"