1

我只是尝试调用此代码

uname=""
passwd="jhj"
if uname =="":print "uname"
if passwd=="":print "passwd"
if not uname and passwd:
    print "either"

输出是:

uname
either

它不应该是“uname”吗?我该如何解决这个问题?

4

3 回答 3

3

简单的修复将是

if not uname and not passwd:

因为它评估为

if (not uname) and (not passwd):

或者

if not (uname or passwd):

但是,如果既不提供uname也不password提供(它将打印所有三个),这将无法正常工作。

您可以将逻辑更改为此仅print执行一个构造的构造:

uname = ""
passwd = "jhj"

if not (uname or passwd):
    print "either"
elif not uname:
    print "uname"
elif not passwd:
    print "passwd"
于 2012-04-18T07:40:35.270 回答
3

你在这里做的是:

if (not uname) and passwd:

如果要检查它们是否都是错误的,则需要执行以下操作:

if not uname and not passwd:

注意:

if not (uname and passwd):

不是一回事,好像一个项目是True,整个事情都会评估为假。如果你想用 one 来做not,正确的逻辑是:

if not (uname or passwd):
于 2012-04-18T07:42:00.887 回答
0

您想要的是将notinif not uname and passwd应用于 uname 和 passwd:

if not uname and not passwd

或者:

if not any((uname, passwd))

于 2012-04-18T07:43:14.263 回答