2012-04-03 98 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') 

至少它很短。有时候一个字典对于类似的情况实际上是有用的(如果有更多的选择)。