2012-04-03 75 views
2

我將返回「E」,除非輸入d或D 我想這樣做未做另一個變量,這樣做在同一行Python中輸入驗證

encrypt = 'd' if (raw_input("Encrypt or Decrypt a file(E/d):") == ('d' or 'D')) else 'e' 

[編輯菜單] 確定這裏是一個更難一個

我怎麼可以這樣做此

file_text = 'a.txt' if (raw_input("File name(a.txt):")=='a.txt' else [What I typed in] 
+6

爲什麼一行?它使你的代碼難以理解,對大多數人來說 – 2012-04-03 19:49:23

+0

@BryanOakley如果它是'encrypt = raw_input(「加密或解密文件(E/d):」如果加密!='d'或加密! 'D':encrypt!='e''我也喜歡尋找不同尋常的方法來編程 – GeneralZero 2012-04-03 20:19:00

回答

3

使用in操作:

encrypt = 'd' if raw_input("Encrypt or decrypt a file (E/d):") in ('d', 'D') else 'e' 

或者,你可以直接將輸入小寫和比較,「d」:

encrypt = 'd' if raw_input("Encrypt or decrypt a file (E/d):").lower() == 'd' else 'e' 

最後,如果你想確保他們進入E或d,你可以用它起來while循環:

while True: 
    encrypt = raw_input("Encrypt or decrypt a file (E/d):") 

    # Convert to lowercase 
    encrypt = encrypt.lower() 

    # If it's e or d then break out of the loop 
    if encrypt in ('e', 'd'): 
     break 

    # Otherwise, it'll loop back and ask them to input again 

編輯:要回答你的第二個問題,你可以使用它拉姆達我猜?

file_text = (lambda default, inp: default if inp.lower() == default else inp)("a.txt", raw_input("File name(a.txt):")) 

雖然,這顯然有點愚蠢,太「聰明」了一半。

+0

你也可以嘗試'raw_input(「...」)。lower()=='d''。 – 2012-04-03 19:48:46

+0

我在想同樣的事情,但我想我會盡量靠近原始片段 – 2012-04-03 19:49:15

+0

@AlexVidal我不喜歡簡單的yes或no輸入的循環,而是我喜歡檢查輸入'if non-default [do stuff ]其他的默認值 – GeneralZero 2012-04-03 20:11:36

1

不是真的意味着嚴重,但另一1線的解決方案(我不認爲這是可讀):

encrypt = {'d':'d','D':'d'}.get(raw_input("Encrypt or decrypt a file (E/d):"), 'e') 

至少它很短。有時候一個字典對於類似的情況實際上是有用的(如果有更多的選擇)。