当条件在python中不匹配时,无法执行if语句的else部分

时间:2013-12-07 06:15:32

标签: python for-loop

条件匹配时,按预期打印正确的输出。但是当条件不匹配时“如果找不到”部分不起作用。

此处如果条件检查用户名和密码。如果它满足,它执行它下面的代码,但当它不匹配时,它显示空白,我的意思是没有打印无效的登录,虽然它应该打印

passwd = {}
actual_user = {}
found = False

for row in prsnobj.result:
    actual_user[row[0]] = row[1]

    for i in range(1, 100):
        passwd[row[0]] = row[2]


for i in range(1, 100):

    if login == actual_user[i] and password == passwd[i]:
        found = True
        print "WELCOME !!" 

    if not found:
        print "<h4>Invalid Login</h4>"

3 个答案:

答案 0 :(得分:0)

您可以使用for / else:

在没有标志的情况下编写此内容
for u, p in zip(actual_user.values(), passwd.values()):
    if login == u and password == p:
        print "WELCOME !!"
        break
else:
    print "<h4>Invalid Login</h4>"

但是使用字典可能更好:

logindb = {row[1]:row[2] for row in prsnobj.result}

if login in logindb and logindb[login] == password:
    print "WELCOME !!" 
else:
    print "<h4>Invalid Login</h4>"

答案 1 :(得分:0)

您的代码的相关部分可以更简单地表达为:

if a == 1:
    found = True

if not found:
    print "not found"

这个问题是你从未将发现设置为假。即使a不等于1,从上次找到某些东西时发现仍然是真的。

所以解决方案是这样的:

found = False

if a == 1:
    found = True

if not found:
    print "not found"

答案 2 :(得分:0)

for row in prsnobj.result:

    logindb = {row[1]:row[2]}
    #print logindb

    if login in logindb and logindb[login] == password:
        print "Welcome"
        break 
    else:
        print "Invalid"
        break