使用if else语句检查列表

时间:2011-03-02 01:11:36

标签: python list if-statement

我已经完成了大部分相关问题,但似乎没有一个问题能让我了解我的计划所需要的想法。

users = ["Block Harris",
         "Apple Mccoy",
         "Plays Terry",
         "Michael Strong",
         "Katie Blue"]

nicknames = ["Block",
             "Apple",
             "Plays",
             "Michael",
             "Katie"]


passwords = ["abc",
             "def",
             "ghi",
             "jkl",
             "mno"]

levels = [5,2,1,4,3]

security = 0
found_user = False

username = ""
while not username:
    username = input("Username: ")

password = ""
while not password:
    password = input("Password: ")

for i in range(5):
    if username == users[i]:      
        found_user = True        
        if password == passwords[i]:
            security = levels[i]
            print("Welcome, ", nicknames[i])
            break                  
        else:
            print("Sorry, you don't know the password.")  

if found_user == levels[0]:
    print("Security level 1: You have little privelages. Congratulations.")
elif found_user == levels[1]:
    print("Security level 2: You have more than little privelages. Congratulations.")
elif found_user == levels[2]:
    print("Security level 3: You have average privelages. Congratulations.")
elif found_user == levels[3]:
    print("Security level 4: You have more than average privelages. Congratulations.")
elif found_user == levels[4]:
    print("Security level 5: You have wizard privelages. Congratulations.")

else:
    print("Apparently you don't exist.")

data_network()

我在这里尝试做的是尝试测试每个成员或在数据库中找到用户的安全级别,然后使用下面的if-else语句根据其安全级别打印相应的消息。我不知道程序正在做什么,但它没有根据列表中的级别来评估找到的用户。例如,对于第一个人,列表中的级别相应地为5,但它会打印“找到用户==级别[2]”的消息。

3 个答案:

答案 0 :(得分:7)

您将“FoundUser”设置为“True”或“False”,然后检查列表中的整数级别。它总是打印2,因为列表中的第二项是1。

<强>建议:

您应该创建一个包含链接在一起的所有信息的类,而不是根据其排序形成仅略微相关的列表:

class User(object):
    def __init__(self, name, nickname, password, security_level):
        self.name = name
        self.nick = nickname
        self.pw = password
        self.level = security_level

    def authenticate(self, name, password):
        return self.name == name and self.pw == password

    def getLevel(self, name, password):
        if self.authenticate(name, password):
            print("Welcome", self.nick)
            return self.level
        else:
            return None

答案 1 :(得分:2)

看看 wheaties 回答哪个是好建议。关于您的代码,您尝试使用found_user来访问安全级别。 found_user是一个布尔值而不是一个级别。您应该使用security变量。

尝试打印关卡信息时,请使用security变量并检查关卡,而不是包含不同用户关卡的列表:

if security == 1:
    print("Security level 1: You have little privelages. Congratulations.")
elif security == 2:
    print("Security level 2: You have more than little privelages. Congratulations.")
elif security == 3:
    print("Security level 3: You have average privelages. Congratulations.")
elif security == 4:
    print("Security level 4: You have more than average privelages. Congratulations.")
elif security == 5:
    print("Security level 5: You have wizard privelages. Congratulations.")

else:
    print("Apparently you don't exist.")

甚至

   levels_info = [
        "Security level 1: You have little privelages. Congratulations.",
        "Security level 2: You have more than little privelages. Congratulations.",
        "Security level 3: You have average privelages. Congratulations.",
        "Security level 4: You have more than average privelages. Congratulations.",
        "Security level 5: You have wizard privelages. Congratulations."
    ]

    if security in levels_info:
        print levels_info[security]
    else
        print "Apparently you don't exist."

答案 2 :(得分:0)

dic = {"Block Harris":("Block","abc",5),
       "Apple Mccoy":("Apple","def",2),
       "Plays Terry":("Plays","ghi",1),
       "Michael Strong":("Michael","jkl",4),
       "Katie Blue":("Katie","mno",3)}

message = dict(zip(1,2,3,4,5),("Security level 1: You have little priveleges. Congratulations.",
                               "Security level 2: You have more than little priveleges. Congratulations.",
                               "Security level 3: You have average priveleges. Congratulations.",
                               "Security level 4: You have more than average priveleges. Congratulations.",
                               "Security level 5: You have wizard priveleges. Congratulations."))


username = ""
while not username:
    username = raw_input("Username: ")

password = ""
while not password:
    password = raw_input("Password: ")

try:
    if password==dic[username][1]:
        security = dic[username][2]
        print("Welcome, ", dic[username][0])
        print(message[security])
    else:
        print("Sorry, you don't know the password.")
except:
    print("You are not registered")

编辑:

上面的消息作为一个整数作为键的字典是愚蠢的;这个更好

message = ("Security level 1: You have little priveleges. Congratulations.",
           "Security level 2: You have more than little priveleges. Congratulations.",
           "Security level 3: You have average priveleges. Congratulations.",
           "Security level 4: You have more than average priveleges. Congratulations.",
           "Security level 5: You have wizard priveleges. Congratulations.")
相关问题