Python:在一个IF语句中组合NOT,AND,IN

时间:2018-06-29 14:57:58

标签: python python-3.x

基本上,我需要检查var是否为ASCII中的字母字符。 所以r_upper是高位字符的范围。 r_lower是小写字符的范围。 而32是空间值。 (稍后将实现.strip())

我从来没有做过这样的事情,所以错误很明显,或者这不可能吗?

r_upper = range(65, 91)
r_lower = range(97, 123)
var = 95
if var not in r_lower or var not in r_upper or var !== 32:
    print("Worked")

我也尝试过:

if not var in r_lower or not var in r_upper or var !== 32:

也有语法错误。

也许有一种方法可以使整个IF语句不做或不做

5 个答案:

答案 0 :(得分:2)

这就足够了:

import string
var = 95 ## chr(95)='_'
if chr(var) not in string.ascii_letters+' ': 
    print  'worked' ## not an alphabetic nor space character

编辑: 在列表中添加了空格(ascii_letters是包含...字母的字符串)

答案 1 :(得分:2)

每个人都没有抓住重点。尽管有一些更好的方法可以实现,但是没有人指出您代码中的真正错误:

由于您希望变量为ascii字母,因此不能是任何这些条件,因此您想使用and布尔运算符,而不是or

if var not in r_lower and var not in r_upper and var != 32:

那会很好。...如果您想使用or,那么条件会改变:

if not(var in r_lower or var in r_upper or var == 32):

答案 2 :(得分:1)

您的问题是var !== 32,应该是var != 32:

您可以这样简化:

r_upper = set(range(65, 91))
r_lower = set(range(97, 123))
r_all = r_upper.union(r_lower)
r_all.add(32)

然后像这样进行检查:

if var not in r_all:

答案 3 :(得分:1)

使用add=TRUE也是可行且性能良好的解决方案:

any()

答案 4 :(得分:-1)

我真的没有在那儿找到for子句,因为var不是一个可变量,并且正如每个人都解释的那样,运算符是!=,所以它不是javascript。

r_upper = range(65, 91)
r_lower = range(97, 123)
var = 95
if (var not in r_lower) or (var not in r_upper) or (var != 32):
    print("Worked")

如果要混淆条件,最好在这些条件上优先显示(类似于数学),请使用括号,因此:

首先,您要评估not in编码的布尔值,然后对or进行第二个not in条件的结果求值,对第三or进行{{1}的结果求值}条件