2017-10-11 51 views
-1

我正在尋找一個有趣的任務,同時通過搜索來進行健壯的驗證,下面只是我的驗證代碼。試圖做煎餅

Pan = 「1234567890-=[]{}%^*+_\|~<>€$¥•.,?!/()£&@「 # this is my list that I’m going to check an input against 

Valid = False 
while Valid ==False: 
     Valid = True 
     Forename=input(「Please enter name」) 
     For i in range (0,len(pan)): 
       if input[i] in pan == False: 
        Valid == False 

我得到一個語法錯誤在該行

if input[i] in pan == False: 

該消息是

TypeError: ‘builtin_function_or_method’ object is not subscriptable

對不起提前爲是有點野應

+0

當你得到一個解決,請記得贊成票有用的東西,並接受你最喜歡的答案(即使你必須把它寫自己),所以堆棧溢出可以正確地存檔問題。 – Prune

回答

0

在您的發佈代碼中有幾個問題。首先,您需要輸入名稱由Pan中的字符組成 - 名稱通常是字母,因此我擔心您的邏輯會顛倒過來。但是...

  1. 此代碼不會產生給定的輸出:拼寫錯誤的「for」會繪製較早的錯誤。
  2. 您需要爲保存輸入的變量編制索引,而不是輸入函數。這是你得到的錯誤。學會用布爾方式思考:任何時候當你有「== False」或「== True」時,你都沒有正確地做到這一點。
  3. 只抓取一次輸入 - 不要讓用戶輸入每次字符檢查。

這裏的這些更新後的代碼:

pan = 「1234567890-=[]{}%^*+_\|~<>€$¥•.,?!/()£&@「 # valid characters 

forename = input(「Please enter name」) 

valid = False 
while not valid: 
    valid = True  # input is good until we get a bad value 
    for i in range (0, len(forename)): 
     if forename[i] not in pan: 
      valid = False 
      break 

接下來,請注意,你並不真的需要每個字符的索引;你只需要字符。 user6731765的回答顯示了此更新。

對於高級起酥油,請了解全部任意功能; 所有在這裏工作,檢查容易的整個輸入字符串:

forename = "INVALID NAME" 

# Are all the name's characters found in pan? 
while not all(char in pan for char in forename): 
    forename = input(「Please enter name」) 
+0

正確的感謝我還是相當新的計算,但感謝幫助我在這裏 – user8750444

+0

很高興成爲幫助。我們在某些時候都是新的。這就是爲什麼我給你一個解決方案,使用你當前的一套工具,然後用一些先進的工具。 – Prune

+0

儘管你絕對的傳奇,但看到你的代碼工作沒有什麼比這更好 – user8750444

1

的幾個注意事項的:

  • 檢查是否input[i]它不是Pan應使用not
  • Valid==False做應該是Valid=False,因爲你設置的變量
  • For必須以小寫

嘗試使用以下開始,我清理變量有點

pan = 「1234567890-=[]{}%^*+_\|~<>€$¥•.,?!/()£&@「 # this is my list that I’m going to check an input against 

valid = False 
while valid == False: 
    valid = True 
    forename = input("Please enter name") 
    for i in range (0,len(pan)): 
     if input[i] not in pan: 
      valid = False 

這裏是一個更簡潔的版本

name = input("Please enter a name") 
valid = True 
for char in pan: 
    if char in name: 
     valid = False 
     break 
+0

謝謝你,但我不明白char是什麼,請問你能解釋一下嗎 – user8750444

+0

char只是一個代表單個字符的變量。請注意,如果在中間兩行中交換** pan **和** name **,這同樣適用。 – Prune