2015-10-03 66 views
1

我想通過使用包含有效輸入字符串的列表來驗證輸入,但我似乎無法讓它正常工作,有什麼幫助嗎?驗證名單

choice = ["A","a","B","b"] 
def main(): 
    test = input() 
    if validate(test): 
     print("Entered a") 
    else: 
     print("did not enter a") 

def validate(val): 
    try: 
     val = choice.index[1] 
    except: 
     return False 
    else: 
     return True 
main() 
+0

did you mean choice.index [val]? – eran

+0

我懷疑它應該是'choice.index(val)'(與parens,不括號,並尋找'val',不分配給它)。但是那個愚蠢的裸露的'除了:'(絕不會使用BARE EXCEPT!)掩蓋了這個問題。如果except僅針對'ValueError',那麼它不會使用括號引發來掩蓋'TypeError'。當然,它仍然是一個毫無意義的方式來測試('返回val in choice'是正確和簡單的),但這就是原始代碼破壞的原因。 – ShadowRanger

回答

0

這是你想要的嗎?這將檢查針對val成員的輸入。如果條目在vals,它會接受它。

vals = ["a","b","c"] 
def main(): 
    test = input() 
    if validate(test): 
     print("Valid entry") 
    else: 
     print("did not enter valid info") 
def validate(val): 
    for i in vals: 
     if val == i: 
      return True 
    return False 
main() 

我有點困惑你的問題,但我希望這有助於。

+0

是的,謝謝,對不起,我是新來的python,所以這可能應該已經相對簡單 – MaundyMoo

+0

不用擔心。如果這對你有幫助,你能否將其標記爲已接受? – intboolstring

3

無需在驗證一個例外,只是檢查列表包含元素使用in操作:

def validate(val): 
    if val in choice: # checks if the value is in the list. 
     return True 

無需一個else子句中validate()要麼因爲該函數將返回None這將評估爲False


爲了使這個更好的,只是返回元素(這將再次評估,以True):

choice = ["A","a","B","b"] 
def main(): 
    test = input() 
    if validate(test): 
     print("Entered " + val) 
    else: 
     print("Did not enter a valid value") 

def validate(val): 
    if val in choice: 
     return val 
0

你可以嘗試使用以下,看看它是否適合你?

def validate(val): 
    if val in choice 
     return True 
    return False 

返回False明確是關於函數做什麼,你可以生活在沒有那個

3

很清楚試試這個襯墊

def validate(val): 
    return val in choice 

,你可以做這樣的事情:

test = inputFromUser() 

print validate(test) and "Entered " + test or "Did not enter a valid value"