为什么添加“和”会破坏代码行的工作方式?

时间:2012-04-16 13:25:26

标签: python django

现在我有

if request.POST['superPoints'].count('.') == False:

然后它继续其他代码。但是如果我加入

if request.POST['cashTexts'].count('.') and request.POST['superPoints']('.') == False:

无论在两种形式中输入什么,它总是转到else:语句。因此,当你试图计算两件事时,其他不是False的东西会出现并扰乱流程吗?为什么不将这些陈述联合起来呢?

编辑:
如果我这样做,它可以工作:

if request.POST['cashTexts'].count('.') == False:

所以我不认为这是其中一个领域的问题。

编辑::如果我将它们设置为它就可以工作!=真。不确定为什么,但我一定得到了除了假的东西。

2 个答案:

答案 0 :(得分:2)

尝试:

if not request.POST['cashTexts'].count('.') and not request.POST['superPoints']:

我认为你的问题与运营商优先权有关。

你在做:

test1 and test2 == False

这转换为:

test1 and (test2 == False)

与以下内容相同:

test1 == True and test2 == False

答案 1 :(得分:2)

在Python中测试真实性的首选方法是:

if obj:
    pass

而不是:

if obj == True:
    pass

类似于虚假:

if not obj:
    pass

而不是:

if obj == False:
    pass

此外,.count() string方法返回子字符串的出现次数。如果您只想测试字符串中的字符是否至少一次,请使用:

if '.' in mystr:
    pass

如果要测试字符串中是否没有字符,请使用:

if '.' not in mystr:
    pass

因此,如果您想测试其中一个字段中是否没有点,请执行以下操作:

if '.' not in request.POST['cashTexts'] and '.' not in request.POST['superPoints']:
    pass