Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python输入验证_Python_Input_Validation - Fatal编程技术网

Python输入验证

Python输入验证,python,input,validation,Python,Input,Validation,我有一个菜单,它会返回“e”,除非输入是d或d。 我不想再做另一个变量,也不想在一行上做 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] 在操作

我有一个菜单,它会返回“e”,除非输入是d或d。 我不想再做另一个变量,也不想在一行上做

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]

在操作符中使用

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
编辑:为了回答你的第二个问题,我想你可以用一个lambda

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

尽管如此,这显然有点迟钝,太“聪明”了。

使用
中的
操作符:

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
编辑:为了回答你的第二个问题,我想你可以用一个lambda

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

尽管如此,这显然有点迟钝,太“聪明”了。

不是认真的意思,而是另一种单线解决方案(我认为它不可读):


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

不是认真的意思,而是另一种单线解决方案(我认为它不可读):


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

你也可以尝试
原始输入(“…”)。lower()='d'
。我也在想同样的事情,但我想我应该尽量靠近原始代码段。@AlexVidal我不喜欢简单的是或否输入的循环。相反,我喜欢检查输入
如果不是默认的[do stuff],否则是默认的
,你也可以尝试
原始输入(“…”).lower()='d'
。我也在想同样的事情,但我想我应该尽量靠近原始代码段。@AlexVidal我不喜欢简单的是或否输入的循环。相反,我喜欢检查输入
如果是非默认的[do stuff],那么它是默认的
为什么是一行?对于大多数人来说,这会使代码更难理解people@BryanOakley如果它是
encrypt=raw\u输入(“加密或解密文件(E/d)”如果encrypt!=“d”或encrypt!=“d”:encrypt!=“e”
我也喜欢寻找不寻常的和不同的编程方式为什么只有一行?这会让大多数人更难理解你的代码people@BryanOakley如果它是
encrypt=raw\u输入(“加密或解密文件(E/d)”如果encrypt!=“d”或encrypt!=“d”:encrypt!=“e”
我也喜欢寻找不寻常的和不同的编程方法